一 登錄接入準(zhǔn)備
- 登錄官方文檔
- 在上面的網(wǎng)址中,點(diǎn)擊
CONFIGURE A PROJECT
來創(chuàng)建一個(gè)登錄的工程 - 按要求生成 SHA-1
keytool -exportcert -keystore your_keystore -list -v
- 注意 ==如果編譯的版本使用的keystore和這里用的keystore不同垮耳,則登錄時(shí)會(huì)log中會(huì)報(bào)錯(cuò) Status{statusCode=DEVELOPER_ERROR, resolution=null}== 可以參見 stackoverflow上的問題
- 點(diǎn)擊官方文檔頁(yè)面中按鈕
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)備
- 測(cè)試訂單:設(shè)置 -> 賬號(hào)詳情頁(yè) -> 許可測(cè)試 添加需要許可的google賬號(hào)
- 在Google Play Console中新建應(yīng)用
- 應(yīng)用的商店發(fā)布->應(yīng)用內(nèi)商品 添加需要出售的商品
- 發(fā)布測(cè)試版本:版本管理->應(yīng)用版本->發(fā)布alpha或其他測(cè)試版本。 點(diǎn)入測(cè)試版本后即可管理測(cè)試人員绍豁,建議都設(shè)置為封閉式測(cè)試芯咧,版本發(fā)布==一段時(shí)間==后,
加入測(cè)試的網(wǎng)址
就會(huì)顯示一個(gè)加入測(cè)試鏈接竹揍,參加測(cè)試的人員就可以進(jìn)入頁(yè)面加入測(cè)試敬飒。
三 游戲成就接入準(zhǔn)備
- 官方文檔
- 同在Google Play Console中 最上層菜單中找到
游戲服務(wù)
中,新建一個(gè)游戲服務(wù)項(xiàng)目芬位,并關(guān)聯(lián)前面建立的應(yīng)用无拗。 - 設(shè)置好成就內(nèi)容,并將成就Id放入自己游戲app的配置中昧碉,激活時(shí)需要使用
- 游戲關(guān)聯(lián)游戲服務(wù)后英染,需要設(shè)置好游戲服務(wù)內(nèi)容,并發(fā)布晌纫,才能再修改
二
中的應(yīng)用的商品詳情了税迷。但是需要謹(jǐn)慎對(duì)待游戲服務(wù)的發(fā)布永丝,發(fā)布后==成就==則不可刪除了锹漱。 - 在 游戲服務(wù)-> 關(guān)聯(lián)的應(yīng)用 中設(shè)置綁定的 api客戶端; 這里也可以看到應(yīng)用Id慕嚷,一個(gè)12位的數(shù)字哥牍,也就是游戲服務(wù)任意頁(yè)面上 項(xiàng)目名稱下面的那串?dāng)?shù)字,后面訪問的時(shí)候需要用到喝检。
四 正式接入
-
在build.gradle的dependencies中加入需要的庫(kù)
compile 'com.google.android.gms:play-services-auth:11.8.0' compile 'com.google.android.gms:play-services-games:11.8.0'
-
在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>
-
在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"/>
-
登錄實(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自己的浮窗提示琐脏。
-
成就激活攒砖。成就的激活比較簡(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); } });
-
支付接入吹艇。如果有自己的訂單系統(tǒng)惰蜜,那么需要注意兩點(diǎn)。
- 將自己的訂單Id 作為payload傳遞給google訂單受神。
- 在自己的訂單驗(yàn)證通過完成后蝎抽,再去消耗google商品。
- 增加權(quán)限
<uses-permission android:name="com.android.vending.BILLING" />
- 將google支付示例中的 aidl 加入到自己的工程中 示例下載
- 加入google支付示例中的util工具
util/google_play_util/
- 手機(jī)上安裝GooglePlay環(huán)境
- 代碼接入
// 1. 定義變量 IabHelper mHelper; // 這個(gè)key在 google play consle中 選擇應(yīng)用->開發(fā)工具->服務(wù)和API 中路克,找到"許可與應(yīng)用內(nèi)購(gòu)買結(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)單的 ...
- 如需服務(wù)端驗(yàn)證:api 后臺(tái)需要開放服務(wù)賬號(hào),以及在google play consle中將服務(wù)賬號(hào)加入精算,并授予財(cái)務(wù)信息方法權(quán)限瓢宦。
五 常見問題
- 注意
如果編譯的版本使用的keystore和這里用的keystore不同,則登錄時(shí)會(huì)log中會(huì)報(bào)錯(cuò) Status{statusCode=DEVELOPER_ERROR, resolution=null}
可以參見 stackoverflow上的問題 - 如果成就能激活灰羽,但不顯示google的成就浮窗驮履,需要在登錄完成時(shí)設(shè)置:
Games.getGamesClient(this, account).setViewForPopups(getWindow().getDecorView());