如何使用适用于 android 的 google play 游戏服务实现后端服务器身份验证

Posted

技术标签:

【中文标题】如何使用适用于 android 的 google play 游戏服务实现后端服务器身份验证【英文标题】:how to implement backend server authentication with google play games services for android 【发布时间】:2016-08-19 21:06:55 【问题描述】:

也许我忽略了一些东西,但是通过 Play 游戏服务文档 https://developers.google.com/games/services/android/quickstart,我还不知道如何实现后端服务器身份验证,例如如何从 Google 的服务器获取令牌并将其传递给我自己的后端服务器验证登录。我希望有人能给我一个线索。谢谢!

【问题讨论】:

【参考方案1】:

第 1 步: 使用标准的谷歌登录按钮创建一个按钮

Step2 : 添加按钮点击监听器

第 3 步:在侦听器中检查 google play 服务的可用性

public void googleLoginClicked(View v)
        if (checkPlayServices()) 
            pickUserAccount();
        else
            showToast("Google Play Services is not installed or updated in your deivce", Toast.LENGTH_LONG);
        
    

受保护的布尔值 checkPlayServices() 整数结果代码 =

GooglePlayServicesUtil.isGooglePlayServicesAvailable(this);
        if (resultCode != ConnectionResult.SUCCESS) 
            if (GooglePlayServicesUtil.isUserRecoverableError(resultCode)) 
                GooglePlayServicesUtil.getErrorDialog(resultCode, this,
                        PLAY_SERVICES_RESOLUTION_REQUEST).show();
             else 
             //   Log.i("GCM", "This device is not supported.");
                finish();
            
            return false;
        
        return true;
    

第四步:

在手机中搜索谷歌账户:

private void pickUserAccount() 
        String[] accountTypes = new String[]"com.google";
        Intent intent = AccountPicker.newChooseAccountIntent(null, null,
                accountTypes, false, null, null, null, null);
        startActivityForResult(intent, REQUEST_CODE_PICK_ACCOUNT);
    

第五步:

onActivityResult:

   @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) 
        super.onActivityResult(requestCode, resultCode, data);

        if (requestCode == REQUEST_CODE_PICK_ACCOUNT) 
            if (resultCode == RESULT_OK) 
                mEmail = data.getStringExtra(AccountManager.KEY_ACCOUNT_NAME);
                getUsername(null);
             else if (resultCode == RESULT_CANCELED) 
                showToast("You must pick an account",
                        Toast.LENGTH_SHORT);
            

         else if (requestCode == REQUEST_CODE_RECOVER_FROM_PLAY_SERVICES_ERROR && resultCode == RESULT_OK) 
            Bundle extra = data.getExtras();
            String oneTimeToken = extra.getString("authtoken");
            getUsername(oneTimeToken);

        

    

第6步:成功使用后台任务从谷歌获取用户名

异步任务:

doinbackground()
...
fetchToken
...



 protected String fetchToken() throws IOException 
        try 
            return GoogleAuthUtil.getToken(mActivity, mEmail, mScope);
         catch (UserRecoverableAuthException userRecoverableException) 
            // GooglePlayServices.apk is either old, disabled, or not present, which is
            // recoverable, so we need to show the user some UI through the activity.
            mActivity.handleException(userRecoverableException);
         catch (GoogleAuthException fatalException) 
            onError("Unrecoverable error " + fatalException.getMessage(), fatalException);
        
        return null;
    

【讨论】:

以上是关于如何使用适用于 android 的 google play 游戏服务实现后端服务器身份验证的主要内容,如果未能解决你的问题,请参考以下文章

如何使用适用于 android 的 google play 游戏服务实现后端服务器身份验证

如何设置适用于 Android 的 Google Cloud Messaging?

如何在适用于 Android 的 Google API 的 CameraSource 中保存带有叠加层的图像?

如何将 Amazon Cognito 与适用于 Android 的 Google Plus 集成?

如何在 Unity3D 上显示适用于 Android 的 Google Play 游戏“欢迎回来”吐司?

适用于 Android 的 Google+ 登录 - Google 权限活动结果代码