準備工作
- Google Play Console 的賬號
- 一個地點在美國或者香港等地方的vpn(下面有介紹原因)
- 一部有Google Play應用市場的手機
項目內的操作
首先GoogleSample 項目中有一個關於google pay的例子地址在android-play-billing這是可以拿來參考的,(只不過具體使用的時候報名要換成你在google play console創建的apk的applicationId)
- 在
main
目錄下新建com.android.vending.billing
路徑的包名目錄如下圖所示 - 複製
IInAppBillingService.aidl
文件到這個目錄中文件地址 - 複製android-play-billing中的trivialDrive目錄中的util目錄到本身的工程中目錄地址
- 要獲取應用內支付還必須申請權限,在
AndroidManifest.xml
下添加<uses-permission android:name="com.android.vending.BILLING" />
權限 - 然後還是在
AndroidManifest.xml
中寫入標籤<meta-data
android:name="com.google.android.gms.wallet.api.enabled"
android:value="true" /> - 然後再module目錄下的build.gradle 依賴
com.google.android.gms:play-services-wallet:11.8.0
當項目用了rx系列 retrofit系列 又依賴了過多的google服務的話 可能會有64k警告 可以參考這篇文章解決mutidex
代碼編寫
代碼編寫其實很簡單 只要跟着google的教程 複製黏貼就可以了
- 創建IabHelper實例`IabHelper mHelper;
@Override
public void onCreate(Bundle savedInstanceState) {
// …
String base64EncodedPublicKey;
// compute your public key and store it in base64EncodedPublicKey
mHelper = new IabHelper(this, base64EncodedPublicKey);
}這裏的
base64EncodedPublicKey`指的是在google play console中創建的apk密鑰(下面解釋)
啓動服務監聽
mHelper.startSetup(new IabHelper.OnIabSetupFinishedListener() {
public void onIabSetupFinished(IabResult result) {
if (!result.isSuccess()) {
// Oh no, there was a problem.
Log.d(TAG, "Problem setting up In-app Billing: " + result);
}
// Hooray, IAB is fully set up!
}
});在界面退出時切斷監聽並釋放
@Override
public void onDestroy() {
super.onDestroy();
if (mHelper != null) mHelper.dispose();
mHelper = null;
}支付步驟
/**
* @param act activity
* @param sku 創建的應用內商品的product id
* @param requestCode onActivityResult
* @param listener 支付監聽
* @param extraData 支付傳參 可傳空字符串
*/
//購買商品
mHelper.launchPurchaseFlow(this, SKU GOOGLE_PAY_RESULT,
mPurchaseFinishedListener, "bGoa+V7g/yqDXvKRqq+JTFn4uQZbPiQJo4pf9RzJ");IabHelper.OnIabPurchaseFinishedListener mPurchaseFinishedListener
= new IabHelper.OnIabPurchaseFinishedListener() {
public void onIabPurchaseFinished(IabResult result, Purchase purchase)
{
if (result.isFailure()) {
Log.d(TAG, "Error purchasing: " + result);
return;
}
else if (purchase.getSku().equals(SKU_GAS)) {
// consume the gas and update the UI
}
else if (purchase.getSku().equals(SKU_PREMIUM)) {
// give user access to premium content and update the UI
}
}
};回調處理
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
if (requestCode == GOOGLE_PAY_RESULT) {
mHelper!!.handleActivityResult(requestCode, resultCode, data)
...
}
}
到這裏代碼的基本集成就完成了,這裏只是集成的應用內一次性購買,如果要集成消耗購買 或者訂閱服務請參考官方文檔地址如果點擊支付有對話框彈出來了說明代碼是沒錯的,沒成功只是因爲你在控制檯的有些錯誤
控制檯部分
其實這部分按照參考文檔來完全可以 只是要注意幾個坑
- 上面支出的密鑰在在服務和api中可找到 注意要刪除空格
- 要測試支付應用必須是發佈的,所以不管你項目寫到哪一步只管去發佈,但是不要發佈正式版的 建議發佈alpha版本
- 在發佈前必須要完成
應用分級
,定價和分發內容
等欄目保證沒有警告 - 在分發內容裏邊 注意不能選中國老撾等其他國家(只要國家旁邊有問號的都別選,因爲這些國家google pay是不支持的!)
- 成功發佈後就可以新建應用內商品了
然後在 版本管理->應用版本 管理alpha版本點擊進入創建測試人員,注意當前登陸的賬號並不能直接測試 需要添加後纔可以 創建成功後還必須點開下方的測試鏈接 同意後才能正是成爲測試人員如下圖 點開鏈接如果是下圖所示 就完成了控制檯的集成了
測試要過1,2個小時 等到你的應用顯示
已發佈
就行了