google登錄、成就、支付接入

一 登錄接入準(zhǔn)備

  1. 登錄官方文檔
  2. 在上面的網(wǎng)址中,點(diǎn)擊 CONFIGURE A PROJECT來創(chuàng)建一個(gè)登錄的工程
  3. 按要求生成 SHA-1 keytool -exportcert -keystore your_keystore -list -v
  4. 注意 ==如果編譯的版本使用的keystore和這里用的keystore不同,則登錄時(shí)會(huì)log中會(huì)報(bào)錯(cuò) Status{statusCode=DEVELOPER_ERROR, resolution=null}== 可以參見 stackoverflow上的問題
  5. 點(diǎn)擊官方文檔頁面中按鈕 GOOGLE API CONSOLE,進(jìn)入api后臺(tái),查看憑據(jù)。這個(gè)是 OAuth 2.0客戶端 ID欄目下面應(yīng)該會(huì)有一條 Web client (Auto-created for Google Sign-in),這就是第二步中生成的訪問秘鑰了。

二 支付接入準(zhǔn)備

  1. 測(cè)試訂單:設(shè)置 -> 賬號(hào)詳情頁 -> 許可測(cè)試 添加需要許可的google賬號(hào)
  2. 在Google Play Console中新建應(yīng)用
  3. 應(yīng)用的商店發(fā)布->應(yīng)用內(nèi)商品 添加需要出售的商品
  4. 發(fā)布測(cè)試版本:版本管理->應(yīng)用版本->發(fā)布alpha或其他測(cè)試版本。 點(diǎn)入測(cè)試版本后即可管理測(cè)試人員,建議都設(shè)置為封閉式測(cè)試,版本發(fā)布==一段時(shí)間==后,加入測(cè)試的網(wǎng)址就會(huì)顯示一個(gè)加入測(cè)試鏈接,參加測(cè)試的人員就可以進(jìn)入頁面加入測(cè)試。

三 游戲成就接入準(zhǔn)備

  1. 官方文檔
  2. 同在Google Play Console中 最上層菜單中找到 游戲服務(wù)中,新建一個(gè)游戲服務(wù)項(xiàng)目,并關(guān)聯(lián)前面建立的應(yīng)用。
  3. 設(shè)置好成就內(nèi)容,并將成就Id放入自己游戲app的配置中,激活時(shí)需要使用
  4. 游戲關(guān)聯(lián)游戲服務(wù)后,需要設(shè)置好游戲服務(wù)內(nèi)容,并發(fā)布,才能再修改 中的應(yīng)用的商品詳情了。但是需要謹(jǐn)慎對(duì)待游戲服務(wù)的發(fā)布,發(fā)布后==成就==則不可刪除了。
  5. 在 游戲服務(wù)-> 關(guān)聯(lián)的應(yīng)用 中設(shè)置綁定的 api客戶端; 這里也可以看到應(yīng)用Id,一個(gè)12位的數(shù)字,也就是游戲服務(wù)任意頁面上 項(xiàng)目名稱下面的那串?dāng)?shù)字,后面訪問的時(shí)候需要用到。

四 正式接入

  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中加入中的應(yīng)用Id。實(shí)際后面沒有再用到中創(chuàng)建的那個(gè)Web client (Auto-created for Google Sign-in),只接入login時(shí)是需要的,接入游戲服務(wù)之后,已經(jīng)被后面的代替。

    <string name="google_app_id">your_game_app_id</string>
    
  3. 在AndroidManifest.xml中加入屬性設(shè)定

    <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. 登錄實(shí)現(xiàn)。如果只接登錄,則將DEFAULT_GAMES_SIGN_IN修改為DEFAULT_SIGN_IN。以下代碼段需要放到各自合適的地方

    // 1. 創(chuàng)建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. 發(fā)起登錄
    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中響應(yīng)登錄
    Task<GoogleSignInAccount> task = GoogleSignIn.getSignedInAccountFromIntent(data);
        try {
            GoogleSignInAccount account = task.getResult(ApiException.class);
            Games.getGamesClient(this, account).setViewForPopups(getWindow().getDecorView());
                // 這里可以獲取 account.getIdToken() 用于服務(wù)端驗(yàn)證
                // account.getDisplayName() 名稱顯示
        } catch (ApiException e) {
            Log.d(m_LogTag, "google signInResult:failed code=" + e.getStatusCode());
        }
    

    ==注意:Games.getGamesClient(this, account).setViewForPopups(getWindow().getDecorView());== 這句話用來設(shè)置登錄結(jié)果及google成就完成時(shí)浮窗的父窗口。若未設(shè)置,也可以正常登錄及完成成就,但無google自己的浮窗提示。

    服務(wù)端驗(yàn)證登錄文檔地址

  5. 成就激活。成就的激活比較簡(jiǎn)單,只需要一句代碼。

    // 這里的成就id就是google后天中成就的id
    Games.getAchievementsClient(this, account).unlock("your_achievement_id");
    
    // 也可以顯示所有成就
    Games.getAchievementsClient(this, GoogleSignIn.getLastSignedInAccount(this))
               .getAchievementsIntent()
               .addOnSuccessListener(new OnSuccessListener<Intent>() {
                   @Override
                   public void onSuccess(Intent intent) {
                       startActivityForResult(intent, RC_ACHIEVEMENT_UI);
                   }
               });
    
  6. 支付接入。如果有自己的訂單系統(tǒng),那么需要注意兩點(diǎn)。

    • 將自己的訂單Id 作為payload傳遞給google訂單。
    • 在自己的訂單驗(yàn)證通過完成后,再去消耗google商品。
    1. 增加權(quán)限
    <uses-permission android:name="com.android.vending.BILLING" />
    
    1. 將google支付示例中的 aidl 加入到自己的工程中 示例下載
    2. 加入google支付示例中的util工具 util/google_play_util/
    3. 手機(jī)上安裝GooglePlay環(huán)境
    4. 代碼接入
        // 1. 定義變量
        IabHelper mHelper;
        // 這個(gè)key在 google play consle中 選擇應(yīng)用->開發(fā)工具->服務(wù)和API 中,找到"許可與應(yīng)用內(nèi)購買結(jié)算",那里的 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. 還是自己抄示例代碼吧 很簡(jiǎn)單的
      ...
    
    1. 如需服務(wù)端驗(yàn)證:api 后臺(tái)需要開放服務(wù)賬號(hào),以及在google play consle中將服務(wù)賬號(hào)加入,并授予財(cái)務(wù)信息方法權(quán)限。

五 常見問題

  1. 注意 如果編譯的版本使用的keystore和這里用的keystore不同,則登錄時(shí)會(huì)log中會(huì)報(bào)錯(cuò) Status{statusCode=DEVELOPER_ERROR, resolution=null} 可以參見 stackoverflow上的問題
  2. 如果成就能激活,但不顯示google的成就浮窗,需要在登錄完成時(shí)設(shè)置:Games.getGamesClient(this, account).setViewForPopups(getWindow().getDecorView());
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,922評(píng)論 25 709
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,536評(píng)論 19 139
  • 今天特別特別困,突然醒來,想來還沒交作業(yè),感覺眼睛和睜不開,特別特別想睡覺。 于是就開始掙扎,要不算了,反正在寫作...
    二二書閱讀 249評(píng)論 0 0
  • 引言:最怕你碌碌無為,還安慰自己平凡可貴 我們只是被不成功這個(gè)概念所困擾,卻不肯花時(shí)間去想怎樣才能變得成功。 當(dāng)失...
    蒼羽紗閱讀 651評(píng)論 0 9
  • 今天給大家極力介紹一位資深操盤手,《證券時(shí)報(bào)》“百姓投資”周刊曾介紹過一位短線高手-星辰。他1999年入市,個(gè)人資...
    歸零著閱讀 2,733評(píng)論 0 0

友情鏈接更多精彩內(nèi)容