google登录、成就、支付接入

一 登录接入准备

  1. 登录官方文档
  2. 在上面的网址中,点击 CONFIGURE A PROJECT来创建一个登录的工程
  3. 按要求生成 SHA-1 keytool -exportcert -keystore your_keystore -list -v
  4. 注意 ==如果编译的版本使用的keystore和这里用的keystore不同,则登录时会log中会报错 Status{statusCode=DEVELOPER_ERROR, resolution=null}== 可以参见 stackoverflow上的问题
  5. 点击官方文档页面中按钮 GOOGLE API CONSOLE,进入api后台,查看凭据。这个是 OAuth 2.0客户端 ID栏目下面应该会有一条 Web client (Auto-created for Google Sign-in),这就是第二步中生成的访问秘钥了。

二 支付接入准备

  1. 测试订单:设置 -> 账号详情页 -> 许可测试 添加需要许可的google账号
  2. 在Google Play Console中新建应用
  3. 应用的商店发布->应用内商品 添加需要出售的商品
  4. 发布测试版本:版本管理->应用版本->发布alpha或其他测试版本。 点入测试版本后即可管理测试人员,建议都设置为封闭式测试,版本发布一段时间后,加入测试的网址就会显示一个加入测试链接,参加测试的人员就可以进入页面加入测试。

三 游戏成就接入准备

  1. 官方文档
  2. 同在Google Play Console中 最上层菜单中找到 游戏服务中,新建一个游戏服务项目,并关联前面建立的应用。
  3. 设置好成就内容,并将成就Id放入自己游戏app的配置中,激活时需要使用
  4. 游戏关联游戏服务后,需要设置好游戏服务内容,并发布,才能再修改 中的应用的商品详情了。但是需要谨慎对待游戏服务的发布,发布后==成就==则不可删除了。
  5. 在 游戏服务-> 关联的应用 中设置绑定的 api客户端; 这里也可以看到应用Id,一个12位的数字,也就是游戏服务任意页面上 项目名称下面的那串数字,后面访问的时候需要用到。

四 正式接入

  1. 在build.gradle的dependencies中加入需要的库

    compile 'com.google.android.gms:play-services-auth:11.8.0'
    compile 'com.google.android.gms:play-services-games:11.8.0'
  2. 在res/strings.xml中加入中的应用Id。实际后面没有再用到中创建的那个Web client (Auto-created for Google Sign-in),只接入login时是需要的,接入游戏服务之后,已经被后面的代替。

    <string name="google_app_id">your_game_app_idstring>
  3. 在AndroidManifest.xml中加入属性设定

    <meta-data android:name="com.google.android.gms.games.APP_ID"
      android:value="@string/google_app_id" />
    <meta-data android:name="com.google.android.gms.version"
      android:value="@integer/google_play_services_version"/>
  4. 登录实现。如果只接登录,则将DEFAULT_GAMES_SIGN_IN修改为DEFAULT_SIGN_IN。以下代码段需要放到各自合适的地方

    // 1. 创建client
    GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_GAMES_SIGN_IN)
                .requestIdToken(this.getString(R.string.server_client_id))
                .requestEmail()
                .build();
    m_GoogleSignInClient = GoogleSignIn.getClient(this, gso);
    
    // 2. 发起登录
    this.runOnUiThread(new Runnable() {
      @Override
      public void run() {
        Intent signInIntent = m_GoogleSignInClient.getSignInIntent();
        startActivityForResult(signInIntent, GOOGLE_LOGIN_REQUEST_ID);  // GOOGLE_LOGIN_REQUEST_ID 自己定义
      }
    });
    
    // 3. 在onActivityResult中响应登录
    Task task = GoogleSignIn.getSignedInAccountFromIntent(data);
        try {
            GoogleSignInAccount account = task.getResult(ApiException.class);
            Games.getGamesClient(this, account).setViewForPopups(getWindow().getDecorView());
            // 这里可以获取 account.getIdToken() 用于服务端验证
            // account.getDisplayName() 名称显示
        } catch (ApiException e) {
            Log.d(m_LogTag, "google signInResult:failed code=" + e.getStatusCode());
        }

    注意:Games.getGamesClient(this, account).setViewForPopups(getWindow().getDecorView()); 这句话用来设置登录结果及google成就完成时浮窗的父窗口。若未设置,也可以正常登录及完成成就,但无google自己的浮窗提示。

    服务端验证登录文档地址

  5. 成就激活。成就的激活比较简单,只需要一句代码。

    // 这里的成就id就是google后天中成就的id
    Games.getAchievementsClient(this, account).unlock("your_achievement_id");
    
    // 也可以显示所有成就
    Games.getAchievementsClient(this, GoogleSignIn.getLastSignedInAccount(this))
               .getAchievementsIntent()
               .addOnSuccessListener(new OnSuccessListener() {
                   @Override
                   public void onSuccess(Intent intent) {
                       startActivityForResult(intent, RC_ACHIEVEMENT_UI);
                   }
               });
  6. 支付接入。如果有自己的订单系统,那么需要注意两点。

    • 将自己的订单Id 作为payload传递给google订单。
    • 在自己的订单验证通过完成后,再去消耗google商品。

      1. 增加权限

        <uses-permission android:name="com.android.vending.BILLING" />
      2. 将google支付示例中的 aidl 加入到自己的工程中 示例下载

      3. 加入google支付示例中的util工具 util/google_play_util/
      4. 手机上安装GooglePlay环境
      5. 代码接入

        // 1. 定义变量
        IabHelper mHelper;
        // 这个key在 google play consle中 选择应用->开发工具->服务和API 中,找到"许可与应用内购买结算",那里的 RSA公钥
        static final String base64EncodedPublicKey = "your_public_key";
        
        // 2. 初始化 IabHelper
        mHelper = new IabHelper(this, base64EncodedPublicKey); 
        mHelper.enableDebugLogging(true, "PayHelper");
        mHelper.startSetup(new IabHelper.OnIabSetupFinishedListener() {
            public void onIabSetupFinished(IabResult result) {
                mServicSuccess = result.isSuccess();
            }
        });
        
        // 3. 还是自己抄示例代码吧 很简单的
        ...
      6. 如需服务端验证:api 后台需要开放服务账号,以及在google play consle中将服务账号加入,并授予财务信息方法权限。

五 常见问题

  1. 注意 ==如果编译的版本使用的keystore和这里用的keystore不同,则登录时会log中会报错 Status{statusCode=DEVELOPER_ERROR, resolution=null}== 可以参见 stackoverflow上的问题
  2. 如果成就能激活,但不显示google的成就浮窗,需要在登录完成时设置:Games.getGamesClient(this, account).setViewForPopups(getWindow().getDecorView());

你可能感兴趣的:(android)