有没有办法在不发送推送通知的情况下调用 saveCurrentTurnWithMatchData?

Posted

技术标签:

【中文标题】有没有办法在不发送推送通知的情况下调用 saveCurrentTurnWithMatchData?【英文标题】:Is there any way to call saveCurrentTurnWithMatchData without sending a push notification? 【发布时间】:2013-04-06 05:53:41 【问题描述】:

我有一个 Game Center 游戏,允许玩家每回合进行多次移动。在 ios 6 中,Apple 在 saveCurrentTurnWithMatchData 中实现了一项很棒的功能,让您可以做到这一点 - 它将数据保存到游戏中心以防止作弊,例如通过重复重做动作,而不会前进到下一个玩家.

问题是,我发现当玩家确实结束他们的回合时,这实际上触发了相同的推送通知。所以游戏中的其他玩家会在应用图标上看到一个徽章,并错误地认为该轮到他们了。

有没有人找到解决方法?有什么方法可以在不发送推送通知的情况下调用 saveCurrentTurnWithMatchData?如果不是,这似乎是一个设计缺陷,应该引起 Apple 的注意。

【问题讨论】:

Is there a way to update matchData in a GKTurnBasedMatch without sending out "Your Turn" push notifications?的可能重复 【参考方案1】:

我同意,这似乎是一个设计缺陷。我还在开发一个回合制游戏,玩家可以在将控制权交给下一个玩家之前采取一些行动。同时,我希望其他玩家在观看比赛时能够见证他们的每一个动作。如果其他玩家没有运行该应用程序,我希望他们仅在将控制权传递给其他玩家时收到推送通知。

我没有使用saveCurrentTurnWithMatchData:,而是使用endTurnWithNextParticipants:,但我指定了当前播放器而不是下一个播放器。这似乎可以解决问题:

NSTimeInterval interval = 86400; // seconds in a day
[currentMatch 
  endTurnWithNextParticipants:[[NSArray alloc] initWithObjects:currentMatch.currentParticipant,nil] 
  turnTimeout:interval matchData:[self packMatchData]
  completionHandler:^(NSError *error) 
    if (error) 
       // handle error
    
  
];

【讨论】:

不幸的是,这将向当前参与者安装了游戏的任何其他设备发送推送通知,如 here 所述

以上是关于有没有办法在不发送推送通知的情况下调用 saveCurrentTurnWithMatchData?的主要内容,如果未能解决你的问题,请参考以下文章

Xamarin - 如何在不使用其他服务的情况下发送推送通知

我可以在不经过端点的情况下发送推送通知吗?角 6

可以使用推送通知在不通知用户的情况下运行代码吗?

是否可以在不构建任何应用程序的情况下向 Android 发送推送通知?

如何在不使用php循环的情况下同时向ios设备发送1000条推送通知

从 php 服务器向 ios 设备发送多个推送通知