我正在使用Google Play服务开发一款Android游戏,用于创建回合制比赛。
起初一切都很好,我使用以下代码为已登录的用户加载回合制比赛:
```html ```
Games.TurnBasedMultiplayer.loadMatchesByStatus(getApiClient(),
new int[]{TurnBasedMatch.MATCH_TURN_STATUS_MY_TURN,
TurnBasedMatch.MATCH_TURN_STATUS_THEIR_TURN,
TurnBasedMatch.MATCH_TURN_STATUS_INVITED,
TurnBasedMatch.MATCH_TURN_STATUS_COMPLETE})
.setResultCallback(this);
最近,我的回调函数被调用,但没有匹配到任何比赛(状态响应为OK),以前它总是加载所有与给定状态之一相符的比赛。我清除了手机上的Google Play服务缓存并重新启动了设备。在那个时候,所有的比赛都再次显示,直到下一次我打开应用程序,然后所有比赛都消失了。
一旦我开始一场新的比赛,使用上述方法(刷新列表)可以一直看到这场比赛,直到我关闭应用程序。下一次启动后,该比赛也消失了。
我必须说,该游戏尚未发布,但正在Google Play开发者控制台的测试阶段中。我在模拟器上发现了同样的问题。它运行得很好,但突然出现了与我的真实设备相同的问题(使用更高版本的构建,因此不是单个代码更改引起的问题)。
是否有人注意到了这种行为或者有解决方法?
它可能与将多个应用程序连接到一个游戏有关吗?我连接了两个使用调试证书签署的应用程序,并在今天下午添加了一个签署APK的应用程序。当我使用签名APK时,它又可以正常工作,直到我部署了新的测试应用程序(使用调试签名)。但回到签名APK后,该错误仍然存在。
由于似乎没有人知道答案,让我重新描述问题。我是否应该在设备上缓存TurnBasedMatches?我再次删除了Play服务缓存并重新打开了我的应用程序。结果如何?数百个游戏的列表(因为我每次测试时都必须开始一场新比赛...)
这是我处理loadMatchesResult的代码:
@Override
public void onResult(TurnBasedMultiplayer.LoadMatchesResult loadMatchesResult)
{
showToast("GotMatches status: " + loadMatchesResult.getStatus().getStatusCode());
//add matches to listview (only caching matchId, no references to turnbasedmatch)
loadMatchesResult.getMatches().getMyTurnMatches().close();
loadMatchesResult.getMatches().getInvitations().close();
loadMatchesResult.getMatches().getTheirTurnMatches().close();
loadMatchesResult.getMatches().getCompletedMatches().close();
loadMatchesResult.release();
}
发现另一个感兴趣的点...看起来问题出现在将新apk部署到设备时...一旦我部署了新的apk(无论是从Google Play安装alpha版本还是直接从Android Studio调试版本),匹配项就会消失。当我不更改apk时,我可以重新启动手机/关闭应用程序,它可以正常工作...
如果我通过Play商店更新应用程序,问题也会发生...应该有更多人遇到这个问题!