【问题标题】:Is there any way to call saveCurrentTurnWithMatchData without sending a push notification?有没有办法在不发送推送通知的情况下调用 saveCurrentTurnWithMatchData?
【发布时间】:2013-04-06 05:53:41
【问题描述】:
我有一个 Game Center 游戏,允许玩家每回合进行多次移动。在 iOS 6 中,Apple 在 saveCurrentTurnWithMatchData 中实现了一项很棒的功能,让您可以做到这一点 - 它将数据保存到游戏中心以防止作弊,例如通过重复重做动作,而不会前进到下一个玩家.
问题是,我发现当玩家确实结束他们的回合时,这实际上触发了相同的推送通知。所以游戏中的其他玩家会在应用图标上看到一个徽章,并错误地认为该轮到他们了。
有没有人找到解决方法?有什么方法可以在不发送推送通知的情况下调用 saveCurrentTurnWithMatchData?如果不是,这似乎是一个设计缺陷,应该引起 Apple 的注意。
【问题讨论】:
标签:
ios
apple-push-notifications
gamekit
【解决方案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 所述