我在谷歌播放服务(多人游戏)中发现的问题是被邀请者必须已经打开应用程序以响应邀请。
即使应用已关闭(背景),我也无法在被邀请者电话上显示邀请吗?谢谢
答案 0 :(得分:3)
如果您向游戏运行的玩家发送邀请,则应在游戏内触发OnInvitationReceivedListene r。
如果您向未运行游戏的玩家发送邀请,则其手机上的Google Play服务应收到请求。然后玩家可以接受或拒绝该邀请。
如果他接受邀请,您的游戏将会启动,ConnectionCallbacks.onConnected()将会被包含GamesClient.EXTRA_INVITATION的捆绑包触发。使用此invitation对象,您可以加入适当的房间。
请注意,我在 Google Play Services SDK版本中遇到过错误。 3.2.65 - onConnected回调中的bundle不返回邀请ID。 这似乎是在 4.0.30 中修复的。
答案 1 :(得分:2)
我遇到了同样的问题,我不得不解决其他问题。更重要的是,上述答案中的许多链接都被打破了。所以我必须自己做,这就是我做到的。 注意:我正在使用从示例游戏中获得的gamehelper类。进行适当的更改
public void checkInvites()
{
if(!mHelper.isSignedIn()) return;
PendingResult<LoadInvitationsResult> invs = Games.Invitations.loadInvitations(mHelper.getApiClient());
invs.setResultCallback(new ResultCallback<LoadInvitationsResult>(){
@Override
public void onResult(LoadInvitationsResult list) {
if(list==null)return;
if(list.getInvitations().getCount()>0)invitationInbox();
}});
}
此回调invitationInbox()
方法可打开邀请收件箱。
public void invinbox()
{
Intent intent = Games.Invitations.getInvitationInboxIntent(mHelper.getApiClient());
startActivityForResult(intent, RC_INVITATION_INBOX); }
}
优点是您可以随时随地拨打checkInvites()
以检查是否有任何待处理的邀请。
答案 2 :(得分:0)
根据Invitation Acceptance Phase documentation:
发起游戏的玩家会自动加入房间。多人游戏的受邀者将在移动设备上看到通知,以提示他们加入游戏。如果他们接受邀请,您的应用必须发出API调用才能将播放器加入与该邀请相对应的会议室。
Play游戏服务通过ConnectionCallbacks.onConnected()方法通知被邀请者。回调方法传递
connectionHint
Bundle。您的应用可以使用Invitation密钥从此捆绑包中检索GamesClient.EXTRA_INVITATION对象。
正如Invite Players option documentation中所述,您可以使用GamesClient.getSelectPlayersIntent()与RoomConfig.Builder.addPlayersToInvite()返回的所选被邀请者在创建房间时向所选玩家发送邀请,该通知将显示为其他玩家的通知设备
答案 3 :(得分:0)
我看到我的Activity类中的onConnected()没有被调用,但它确实调用了GameHelper类中的onConnected()方法。