google內購In-App Billing

本帖地址:http://blog.csdn.net/jinjian2009/article/details/9140891

這周做了google的內購,沒搞過google的內購還是覺得比較繁瑣的

google官方教程:http://developer.android.com/training/in-app-billing/index.html

這個教程主要寫了四節:

第一節:Preparing Your In-app Billing Application(準備你的內購應用)

內容如下:

1.下載例子程序,按照提示的做OK的,可以把項目trivialdrivesample配置到Eclipse裏看看

2.添加你的應用到開發者後臺。搞定之後會得到個Base64 Key,這個在代碼裏會用到,主要是用於google來識別你的應用

3.添加In-app Billing(後面簡稱iab)庫。其實就是IInAppBillingService.aidl 這個文件,從例子工程裏找到它,copy到自己工程下的src下的包com.android.vending.billing裏面,再把例子工程裏的src下的包com.example.android.trivialdrivesample.util下面的程序copy到自己工程的src下,自己創建個包名就好,本人偷懶直接用了它的包名大笑

4.添加權限,AndroidManifest.xml裏面添加

<uses-permission android:name="com.android.vending.BILLING" />
5.發起和google play的連接

在activity裏添加變量mHelper,以及初始化之,這裏的base64EncodedPublicKey需要賦值爲之前第2步申請到的base64 Key

IabHelper mHelper;

@Override
public void onCreate(Bundle savedInstanceState) {
   // ...
   String base64EncodedPublicKey;
   
   // compute your public key and store it in base64EncodedPublicKey
   mHelper = new IabHelper(this, base64EncodedPublicKey);
}

然後需要調用mHelper的startSetup方法,這是個異步方法,主要是連接google play用的,看看能不能付費什麼的。我學習例子工程把這個方法寫到了OnCreate裏,在mHelper new出來之後。

mHelper.startSetup(new IabHelper.OnIabSetupFinishedListener() {
   public void onIabSetupFinished(IabResult result) {
      if (!result.isSuccess()) {
         // Oh noes, there was a problem.
         Log.d(TAG, "Problem setting up In-app Billing: " + result);
      }            
         // Hooray, IAB is fully set up!  
   }
});
然後還需要在Activity裏面將mHelper移除掉

public void onDestroy() {
   super.onDestroy();
   if (mHelper != null) mHelper.dispose();
   mHelper = null;
}

PS:上面的代碼可以copy例子工程裏的,那裏面寫的可能全一點。

第二節:創建用於出售的iab商品

1.在google play裏面添加iab商品。

1)這個是在後臺做的,需要說明的是,這裏需要添加APK文件,並且這個APK文件需要簽名,必須保證這個APK是你最終的APK,意思是簽名啊包名啊證書啊什麼的,後面都不改了。還有不要發佈該應用

2)添加商品的時候需要指定商品的信息,包括唯一標識ID,描述,價格等信息。唯一標識ID,也被稱爲SKU,通過SKU可以查詢商品的信息

3)上傳之後可能需要一段時間才能查詢到信息

2.查詢可購買物品

通過上面的SKU進行查詢,可參照原帖子代碼,或者例子工程代碼

添加代碼後可以運行APP,看能不能查詢到商品信息。需要注意如下幾點:

1)如果在google play裏面添加商品的話,現在查詢會出錯。

2)如果在國內(大陸地區)查詢也是會出錯的~解決辦法參考了帖子:http://zengrong.net/post/1801.htm

說下本人的解決辦法:

---------------------------------------------------------------國內IAB測試方法-------------------------------------------------------------------

<1>先去找個國外VPN,我在https://www.vcupmars.com註冊的,免費的20分鐘會斷,500M的流量~當然這網站也有沒有限制的,不過需要收費,記住賬號密碼,以及在我的帳戶裏面的域名地址

<2>然後在手機上打開wifi,再設置好VPN,主要是新建個VPN,服務器爲上面的域名地址,然後登陸VPN,賬號密碼爲上面網站註冊的賬號密碼

<3>再去卸載google play的更新,並清除數據(在 設置--》應用程序找到google play)

<4>再打開google play,進去看下,有沒有付費應用可以下載,如果有說明可以了

<5>進入自己的應用,看看能不能查詢到商品(如果不能的話,應該還是google play裏面的問題,可以退出應用再進google,然後再進應用。我發現一般等google play商店更新完之後會OK的)

--------------------------------------------------------------------------------------------------------------------------------------------------

第三節:購買應用內計費商品

看google官方教程,或者例子工程,應該都可以

不過本人做的時候,以爲出了點問題,主要是購買之後沒有消耗商品~什麼意思呢,google play上買東西是這樣子的,他是買了之後相當於放到了倉庫裏,這個時候你還要去消耗它變成你應用裏的東西~

如果沒有消費掉的話,就會出錯哦~委屈

第四節:測試應用程序

這個也沒什麼說的,照着google官方帖子看看~

比較麻煩的是需要綁定信用卡~這個大家自己搜搜帖子吧~貌似開發者賬號不能用於測試,可以添加其他的賬號測試

PS:下面說說過程中遇到的其他比較棘手的問題

1.如果在大陸地區,不使用VPN的話,點擊購買商品是會閃退的

主要的原因是第一節裏面IabHelper mHelper 調用startSetup方法的時候連接google play出錯,後面再調用的時候有些東西沒有設置好

解決辦法是通過mHelper的變量mSetupDone來判斷購買按鈕的事件是否觸發。當然源代碼裏的mSetupDone是私有的,可以將其設置爲public或者寫個調用方法

2.如果在大陸地區,不使用VPN的話,進入應用後,退出應用的時候會報應用發生意外

這個主要的原因是,在第一節裏面寫的在Activity的onDestroy方法裏面需要調用IabHelper mHelper 的dispose方法,而在dispose方法裏有這樣一句

if (mContext != null) mContext.unbindService(mServiceConn);

這裏出錯了~雖然mContext mServiceConn都不爲空,但是因爲在大陸地區,所以在IabHelper mHelper 的startSetup方法裏沒有bindService

解決辦法,寫個變量boolean mBindedService = false;然後在startSetup方法裏bindService的時候賦值給mBindedService,代碼如下:

mBindedService = mContext.bindService(serviceIntent, mServiceConn, Context.BIND_AUTO_CREATE);

然後再dispose裏面加上mBindedService作爲判斷條件

if (mContext != null && mBindedService) mContext.unbindService(mServiceConn);

通過上面設置應該就OK了,還有一條是我自己的原因

3.因爲我對代碼做了一些特殊處理,然後呢發現居然找不到一個類了~

後來發現是斷言做的怪~Base64.java有個斷言assert (e == outBuff.length);

改成拋異常,OK了~


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章