Android 未收到Google Play游戏服务多玩家邀请

Android 未收到Google Play游戏服务多玩家邀请,android,multiplayer,invitation,gkturnbasedmatch,Android,Multiplayer,Invitation,Gkturnbasedmatch,我目前正在开发一款基于回合的多人游戏,并为此使用谷歌游戏服务。所有设置都已完成。用户可以正确登录并选择要与之竞争的玩家。选择后,当用户按下播放按钮时,不会发生任何特殊情况。onActivityResult显示已准备好被邀请者列表,并根据定义的条件创建匹配项。我通过日志查看。但在被邀请者的电话里,我从未收到任何邀请。我查看了emulator(GenyMotion提供Google Play服务,与Android SDk的默认emulator相比)和两款不同的Android手机,但无法收到邀请。我已经

我目前正在开发一款基于回合的多人游戏,并为此使用谷歌游戏服务。所有设置都已完成。用户可以正确登录并选择要与之竞争的玩家。选择后,当用户按下播放按钮时,不会发生任何特殊情况。onActivityResult显示已准备好被邀请者列表,并根据定义的条件创建匹配项。我通过日志查看。但在被邀请者的电话里,我从未收到任何邀请。我查看了emulator(GenyMotion提供Google Play服务,与Android SDk的默认emulator相比)和两款不同的Android手机,但无法收到邀请。我已经按照这里的建议进行了设置

下面是我的代码。请任何人调查一下,让我知道问题出在哪里

(另外,我还知道邀请是通过谷歌云消息发送的,我在开发者控制台中为游戏启用了这项服务)

MultiPlayerInit.java

import java.util.ArrayList;    
import android.R.string;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.view.View.OnClickListener;
import android.widget.Toast;
import com.google.example.games.basegameutils.BaseGameActivity;
import com.google.android.gms.common.api.*;
import com.google.android.gms.games.*;
import com.google.android.gms.games.Players.LoadPlayersResult;
import com.google.android.gms.games.multiplayer.Invitation;
import com.google.android.gms.games.multiplayer.Invitations;
import com.google.android.gms.games.multiplayer.Multiplayer;
import com.google.android.gms.games.multiplayer.OnInvitationReceivedListener;
import com.google.android.gms.games.multiplayer.Invitations.LoadInvitationsResult;
import com.google.android.gms.games.multiplayer.realtime.RoomConfig;
import com.google.android.gms.games.multiplayer.turnbased.TurnBasedMatchConfig;
import com.google.android.gms.games.multiplayer.turnbased.TurnBasedMultiplayer.InitiateMatchResult;

public class MultiPlayerInit extends BaseGameActivity
implements OnClickListener {

    // For our intents
    final static int RC_SELECT_PLAYERS = 10000;
    final static int RC_LOOK_AT_MATCHES = 10001;
    final static int RC_INVITATION_INBOX = 10001;
    final static int REQUEST_ACHIEVEMENTS = 10002;
    String mIncomingInvitationId;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        super.onCreate(savedInstanceState);

        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
            WindowManager.LayoutParams.FLAG_FULLSCREEN);

        setContentView(R.layout.multiplayer_init);

        findViewById(R.id.sign_in_button).setOnClickListener(this);
        findViewById(R.id.sign_out_button).setOnClickListener(this);
        findViewById(R.id.btnInviteFriends).setOnClickListener(this);
        findViewById(R.id.btnGetInvitations).setOnClickListener(this);  
    }

    @Override
    public void onSignInFailed() {
        // Sign in has failed. So show the user the sign-in button.
        findViewById(R.id.sign_in_button).setVisibility(View.VISIBLE);
        findViewById(R.id.sign_out_button).setVisibility(View.GONE);
        findViewById(R.id.btnInviteFriends).setVisibility(View.GONE);
        findViewById(R.id.btnGetInvitations).setVisibility(View.GONE);

        Toast.makeText(getApplicationContext(), "Sorry! your sign-in attempt failed. Please check your credentials...", Toast.LENGTH_LONG).show();
        Log.v("Sign-in Failed","Sorry! your sign-in attempt failed. Please check your credentials...");
    }

    @Override
    public void onSignInSucceeded() {
        // show sign-out button, hide the sign-in button
        findViewById(R.id.sign_in_button).setVisibility(View.GONE);
        findViewById(R.id.sign_out_button).setVisibility(View.VISIBLE);
        findViewById(R.id.btnInviteFriends).setVisibility(View.VISIBLE);
        findViewById(R.id.btnGetInvitations).setVisibility(View.VISIBLE);

        Games.Invitations.registerInvitationListener(getApiClient(), new OnInvitationReceivedListener() {

            @Override
            public void onInvitationRemoved(String arg0) {
                // TODO Auto-generated method stub
            }

            @Override
            public void onInvitationReceived(Invitation invitation) {
                // TODO Auto-generated method stub
                mIncomingInvitationId = invitation.getInvitationId();   
                Toast.makeText(getApplicationContext(), "You have received an invitation from: "+invitation.getInviter().getDisplayName()+" with ID: " +mIncomingInvitationId, Toast.LENGTH_LONG).show();
            }
        });

        Toast.makeText(getApplicationContext(), "You are now logged in successfully...", Toast.LENGTH_LONG).show();
        Log.v("Sign-in Succeeded","You are now logged in successfully...");
        // (your code here: update UI, enable functionality that depends on sign in, etc)
    }

    @Override
    public void onClick(View view) {

        if (view.getId() == R.id.sign_in_button) {
            // start the asynchronous sign in flow
            beginUserInitiatedSignIn();
        }
        else if (view.getId() == R.id.sign_out_button) {
            // sign out.
            signOut();

            // show sign-in button, hide the sign-out button
            findViewById(R.id.sign_in_button).setVisibility(View.VISIBLE);
            findViewById(R.id.sign_out_button).setVisibility(View.GONE);
            findViewById(R.id.btnInviteFriends).setVisibility(View.GONE);
            findViewById(R.id.btnGetInvitations).setVisibility(View.GONE);          
        }
        else if (view.getId() == R.id.btnInviteFriends) {

            Intent intent = Games.TurnBasedMultiplayer.getSelectOpponentsIntent(getApiClient(), 1, 3);
            startActivityForResult(intent, RC_SELECT_PLAYERS);
        }

        else if (view.getId() == R.id.btnGetInvitations) {

            Intent intent = 
                    Games.TurnBasedMultiplayer.getInboxIntent(getApiClient());
                startActivityForResult(intent, RC_INVITATION_INBOX);            

        }
    }

    @Override
    protected void onActivityResult(int request, int response, Intent data) {
        // TODO Auto-generated method stub
        super.onActivityResult(request, response, data);

        if (request == RC_SELECT_PLAYERS) {
            if (response != Activity.RESULT_OK) {
                // user canceled
                return;
            }

            // get the invitee list
            final ArrayList<String> invitees =
                    data.getStringArrayListExtra(Games.EXTRA_PLAYER_IDS);

            // get auto-match criteria
            Bundle autoMatchCriteria = null;
            int minAutoMatchPlayers = data.getIntExtra(
                    Multiplayer.EXTRA_MIN_AUTOMATCH_PLAYERS, 0);
            int maxAutoMatchPlayers
                    = data.getIntExtra(
                    Multiplayer.EXTRA_MAX_AUTOMATCH_PLAYERS, 0);
            if (minAutoMatchPlayers > 0) {
                autoMatchCriteria
                        = RoomConfig.createAutoMatchCriteria(
                        minAutoMatchPlayers, maxAutoMatchPlayers, 0);
            } else {
                autoMatchCriteria = null;
            }

            TurnBasedMatchConfig tbmc = TurnBasedMatchConfig.builder()
                    .addInvitedPlayers(invitees)
                    .setAutoMatchCriteria(autoMatchCriteria).build();

            Games.TurnBasedMultiplayer
                .createMatch(getApiClient(), tbmc)
                .setResultCallback(new MatchInitiatedCallback());

        }
    }
}
import java.util.ArrayList;
导入android.R.string;
导入android.app.Activity;
导入android.content.Intent;
导入android.os.Bundle;
导入android.util.Log;
导入android.view.view;
导入android.view.Window;
导入android.view.WindowManager;
导入android.view.view.OnClickListener;
导入android.widget.Toast;
导入com.google.example.games.basegameutils.BaseGameActivity;
导入com.google.android.gms.common.api.*;
导入com.google.android.gms.games.*;
导入com.google.android.gms.games.Players.LoadPlayersResult;
导入com.google.android.gms.games.multiplayer.Invitation;
导入com.google.android.gms.games.multiplayer.investments;
导入com.google.android.gms.games.multiplayer.multiplayer;
导入com.google.android.gms.games.multiplayer.OnInvitationReceivedListener;
导入com.google.android.gms.games.multiplayer.Invitations.LoadInvitationsResult;
导入com.google.android.gms.games.multiplayer.realtime.RoomConfig;
导入com.google.android.gms.games.multiplayer.turnbased.TurnBasedMatchConfig;
导入com.google.android.gms.games.multiplayer.turnbased.TurnBasedMultiplayer.initiateMachresult;
公共类多层IT扩展BaseGameActivity
实现OnClickListener{
//为了我们的目的
最终静态整数RC_SELECT_PLAYERS=10000;
最终静态int RC_LOOK_AT_MATCHES=10001;
最终静态int RC_邀请_收件箱=10001;
最终静态int请求_成就=10002;
字符串mIncomingInvitationId;
@凌驾
创建时的公共void(Bundle savedInstanceState){
requestWindowFeature(窗口。功能\u无\u标题);
super.onCreate(savedInstanceState);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_全屏,
WindowManager.LayoutParams.FLAG(全屏);
setContentView(R.layout.multiplayer_init);
findviewbyd(R.id.sign_in_按钮);
findviewbyd(R.id.sign\u out\u按钮);
findViewById(R.id.btnInviteFriends).setOnClickListener(this);
findviewbyd(R.id.btnGetInvitations).setOnClickListener(this);
}
@凌驾
公共无效已签名失败(){
//登录失败。请向用户显示登录按钮。
findViewById(R.id.sign_in_按钮)。设置可见性(View.VISIBLE);
findViewById(R.id.sign\u out\u按钮)。设置可见性(View.GONE);
findViewById(R.id.btnInviteFriends).setVisibility(View.go);
findviewbyd(R.id.btnGetInvitations).setVisibility(View.go);
Toast.makeText(getApplicationContext(),“抱歉!您的登录尝试失败。请检查您的凭据…”,Toast.LENGTH\u LONG.show();
Log.v(“登录失败”,“对不起!您的登录尝试失败。请检查您的凭据…”);
}
@凌驾
public void onSignancedAccessed(){
//显示注销按钮,隐藏登录按钮
findViewById(R.id.sign_in_按钮)。设置可见性(View.GONE);
findViewById(R.id.sign\u out\u按钮)。设置可见性(View.VISIBLE);
findViewById(R.id.btnInviteFriends).setVisibility(View.VISIBLE);
findviewbyd(R.id.btnGetInvitations).setVisibility(View.VISIBLE);
Games.Invitations.registerInvitationListener(getApiClient(),新OnInvitationReceivedListener()){
@凌驾
已删除公共无效onInvitationRemoved(字符串arg0){
//TODO自动生成的方法存根
}
@凌驾
收到公开无效通知(邀请){
//TODO自动生成的方法存根
mIncomingInvitationId=邀请。getInvitationId();
Toast.makeText(getApplicationContext(),“您收到了来自以下地址的邀请:“+invitation.getInviter().getDisplayName()+”,ID:“+mIncomingInvitationId,Toast.LENGTH_LONG).show();
}
});
Toast.makeText(getApplicationContext(),“您现在已成功登录…”,Toast.LENGTH\u LONG.show();
Log.v(“登录成功”,“您现在已成功登录…”);
//(此处的代码:更新UI、启用依赖于登录的功能等)
}
@凌驾
公共void onClick(视图){
if(view.getId()==R.id.sign\u in\u按钮){
//启动异步登录流
beginUserInitiatedSignIn();
}
else if(view.getId()==R.id.sign\u out\u按钮){
//注销。
签出();
//显示登录按钮,隐藏注销按钮
findViewById(R.id.sign_in_按钮)。设置可见性(View.VISIBLE);
findViewById(R.id.sign\u out\u按钮)。设置可见性(View.GONE);
findViewById(R.id.btnInviteFriends).setVisibility(View.go);
findviewbyd(R.id.btnGetInvitations).setVisibility(View.go);
}
else if(view.getId()==R.id.btnInviteFriends){
Intent Intent=Games.TurnBasedMultiplayer.getSelectOponentInstant(getApiClient(),1,3)
    <?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.xetree.guesspicwithfriends"
    android:versionCode="3"
    android:versionName="2.0" >

    <uses-sdk
        android:minSdkVersion="12"
        android:targetSdkVersion="18" />
    <uses-permission android:name="com.android.vending.BILLING" />
    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
    <uses-permission android:name="android.permission.READ_PHONE_STATE"/>
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
    <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
    <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
    <uses-permission android:name="android.permission.GET_TASKS"/>

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme">

        <meta-data android:name="com.google.android.gms.version"
                    android:value="@integer/google_play_services_version" />

        <meta-data android:name="com.google.android.gms.games.APP_ID"
                    android:value="@string/app_id" />

        <activity android:name="com.xetree.guesspicwithfriends.HomeActivity"
            android:configChanges="orientation|keyboardHidden|screenSize"
            android:label="@string/app_name"
            android:theme="@style/AppBaseTheme"
            android:screenOrientation="portrait" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <activity android:name="com.xetree.guesspicwithfriends.MultiPlayerInit"
                    android:screenOrientation="portrait" />
        </application>

</manifest>