谷歌支付總結(下)
- 如billing開發文件所說,要在你的應用中實現In-app Billing只需要完成以下幾步就可以了。
- 第一,把你上篇下載的AIDL檔案新增到你的工程裡,第二,把<uses-permissionandroid:name="com.android.vending.BILLING"/>
正文:
1.內購商品相關
針對我的專案而言,我們在Google後臺設定的是受管理可消耗的商品("managed per user account"),具體的就是遊戲裡的水晶,玩家可以多次購買。但是Google後臺的這種可重複購買商品(還有一種是隻能購買一次的商品"subscription")有個要求,就是你購買成功後需要主動向Google Play請求消耗這個商品,等消耗成功後你才可以再次下單購買。因此,在遊戲裡的支付會多出一個操作步驟就是請求消耗購買成功的商品。
2.檢測裝置是否支援Google Play Service
在正式開啟支付前,Google billing會檢查你的手機是否支援Google billing,這個下面會講到。為了更好的使用者體驗,建議在Google billing檢測之前,可以先檢測一下使用者的裝置是否支援Google Play Service,其中基本要求就是安裝了Google
Play應用商店和Google Play Service。如果使用者的裝置不具備這兩個,就可以彈出提示引導使用者去安裝。這裡有兩種方式可以用,一種是通過Google Play Service來進行檢測,就是上篇下載的那個Service擴充套件包,一種是自己寫程式碼,遍歷裝置上安裝的應用程式,檢查是否有安裝Google Play。先說第一種。
(1)Google Play Service
上篇下載的Service包裡會有一個庫工程
把這個庫工程匯入你的eclipse,引用到你的工程裡就可以用了,具體操作可以參加docs下的文件,so easy!匯入成功後,呼叫其中的一個方法就可以了。
- /**
- * Check the device to make sure it has the Google Play Services APK.If
-
* it doesn't, display a dialog that allows users to download the APK from
- * the Google Play Store or enable it in the device's system settings
- */
- private boolean checkPlayServices()
- {
- int resultCode = GooglePlayServicesUtil.isGooglePlayServicesAvailable(this);
- if(resultCode != ConnectionResult.SUCCESS)
- {
- if(GooglePlayServicesUtil.isUserRecoverableError(resultCode))
- {
- GooglePlayServicesUtil.getErrorDialog(resultCode, this,
- PLAY_SERVICES_RESOLUTION_REQUEST).show();
- }
- else
- {
- Log.i(TAG, "This device is not supported");
- finish();
- }
- return false;
- }
- return true;
- }
(2)遍歷包名
Google Play的程式包名是"com.Android.vending",執行在裝置上的Google Play Service的包名是"com.google.android.gms",可以在程式啟動的時候遍歷下裝置上的包名,如果沒有這兩個東西就引導使用者去安裝。
遍歷包名方法
- //Check Google Play
- protected boolean isHaveGooglePlay(Context context, String packageName)
- {
- //Get PackageManager
- final PackageManager packageManager = context.getPackageManager();
- //Get The All Install App Package Name
- List<PackageInfo>pInfo = packageManager.getInstalledPackages(0);
- //Create Name List
- List<String>pName = new ArrayList<String>();
- //Add Package Name into Name List
- if(pInfo != null){
- for(int i=0; i<pInfo.size(); i++){
- String pn = pInfo.get(i).packageName;
- pName.add(pn);
- //Log.v("Package Name", "PackAgeName: = " + pn);
- }
- }
- //Check
- return pName.contains(packageName);
- }
- Uri uri = Uri.parse("market://details?id=" + "要安裝程式的包名");
- Intent it = new Intent(Intent.ACTION_VIEW, uri);
- startActivity(it);
不過還是推薦用Google Play Service來檢測,貌似第二種,即使有的使用者裝了Google Play(像國內使用者),也不支援Google Play Service的。3.新增程式碼(終於要加支付程式碼了)
把上篇下載的samples裡util的程式碼全部拷到你的工程裡,可以新建一個包,放到裡面。
這個說明一下,其實這個例子的程式碼還是不錯的,本著天下程式碼一大抄和拿來主義,就直接拿來用吧!當然如果你覺得這個程式碼寫的不好,或者不適用你的工程,你就可以依據文件自己寫適用的程式碼。當然文件裡說過,為了防止別人破解你的遊戲,最好把裡面的變數和方法都改下名字,畢竟這裡的程式碼任何人都看得到。我的做法是照搬過來了,只是把IabHelper.Java改造了下,因為這個是整個支付的關鍵,其他都是輔助的,可以不管。
把這裡的程式碼拷完,把該import的都import了,你就可以照samples中的程式碼開寫自己的支付了。針對單機遊戲,就需要考慮這個程式碼改造和本地的驗證,加密了。針對網路遊戲就要簡單了。因為我其實對java不太熟悉,所以單機的加密,base驗證,混淆什麼的就不做介紹了。下面主要說網路遊戲。
(1)IabHelper.java
這個是支付的關鍵程式碼,其中已經把設定billing,商品查詢,商品購買,商品回撥,商品驗證以及回撥方法都寫好了,你直接參照samples用就可以了。
01.設定billing
就是開篇所說的繫結ServiceConnection到IInAppBillingService。功能很完善,包括成功和失敗都有回撥,還有各種異常。在你程式的啟動Activity裡檢測完裝置是否Google Play Service後,就可以new一個IabHelper,來呼叫這個方法,根據不同的回撥裡做相應的處理。
- /**
- * Starts the setup process. This will start up the setup process asynchronously.
- * You will be notified through the listener when the setup process is complete.
- * This method is safe to call from a UI thread.
- *
- * @param listener The listener to notify when the setup process is complete.
- */
- public void startSetup(final OnIabSetupFinishedListener listener) {
- // If already set up, can't do it again.
- checkNotDisposed();
- if (mSetupDone) throw new IllegalStateException("IAB helper is already set up.");
- // Connection to IAB service
- logDebug("Starting in-app billing setup.");
- mServiceConn = new ServiceConnection() {
- @Override
- public void onServiceDisconnected(ComponentName name) {
- logDebug("Billing service disconnected.");
- mService = null;
- }
- @Override
- public void onServiceConnected(ComponentName name, IBinder service) {
- if (mDisposed) return;
- logDebug("Billing service connected.");
- mService = IInAppBillingService.Stub.asInterface(service);
- String packageName = mContext.getPackageName();
- try {
- logDebug("Checking for in-app billing 3 support.");
- // check for in-app billing v3 support
- int response = mService.isBillingSupported(3, packageName, ITEM_TYPE_INAPP);
- if (response != BILLING_RESPONSE_RESULT_OK) {
- if (listener != null) listener.onIabSetupFinished(new IabResult(response,
- "Error checking for billing v3 support."));
- // if in-app purchases aren't supported, neither are subscriptions.
- mSubscriptionsSupported = false;
- return;
- }
- logDebug("In-app billing version 3 supported for " + packageName);
- // check for v3 subscriptions support
- response = mService.isBillingSupported(3, packageName, ITEM_TYPE_SUBS);
- if (response == BILLING_RESPONSE_RESULT_OK) {
- logDebug("Subscriptions AVAILABLE.");
- mSubscriptionsSupported = true;
-
相關推薦
谷歌支付總結(下)
如billing開發文件所說,要在你的應用中實現In-app Billing只需要完成以下幾步就可以了。 第一,把你上篇下載的AIDL檔案新增到你的工程裡,第二,把<uses-permissionandroid:name="com
Unity接入谷歌支付
文章理由 前段時間負責Unity接入Google內購功能,一開始研究別人的技術部落格時發現,他們的文章都有些年頭了,有些細節的地方已經不像n年前那樣了,技術永遠是需要更新的,而這篇就作為2016年末的最後一篇接入谷歌內購文章寫給需要的人 準備工作 1.將自己的谷歌賬
谷歌chrome瀏覽器下font-size屬性值小於12px時無效問題的解決辦法
如果單單是想要設定頁面的font-size屬性值小於12px,貌似是一個很簡單、很正常、對於有這個需求的開發者理所當然的事情。 在chrome瀏覽器下,當設定font-size屬性值小於12px時
python+selenium 啟動谷歌和火狐下面的flash
1.安裝火狐 selenium 3.7.0 Firefox 54.0 Python 3.6.2 geckodriver-v0.19.1-win64 一、過程中遇到的問題: 1、報錯:selenium.common.exceptions.WebDriverExcep
Unity IAP 谷歌支付,ios支付——最白話,手把手教你做系列。
Unity IAP支付接入——谷歌支付,IOS支付。 申請商品ID不再贅述。 兩個部分 一,接入SDK 開啟unity選擇Window——Services出現Services視窗 開啟In-App-Purchasing。 跳轉到下個頁面。選擇
谷歌支付驗證 403錯誤
1 說明 本文講述後端使用谷歌api驗證支付的過程 流程: 前端支付完畢之後會獲取token,將token傳送至後端,後端將此token發向google進行查詢,如果是正常有效的token,谷歌會返回對應訂單的詳細資訊,驗證通過後再通知前端進行消費(也可以前
接入谷歌支付所遇到的坑
再提供一個在github上的demo點選開啟連結,一般來說只要按照這個上面的方法,和參考demo中的程式碼。操作起來也就不會很難,這裡主要說說在我開發的時候所遇到的坑1.當你的註冊的服務錯誤的時候,就會
chrome谷歌瀏覽器-DevTool開發者工具-詳細總結
相關 tail justify 任務管理器 log 兩個 停用 表格 需要 chrome的開發者工具可以說是十分強大了,是web開發者的一大利器,作為我個人而言平時用到的幾率很大,相信大家也很常見,但是不要僅僅停留在點選元素看看樣式的層面上哦,跟著我的總結一起學習實踐一下
ubuntu(linux)下谷歌瀏覽器跨域問題,XMLhttprequest跨域問題
replace mod class req box tps 圖片 ebs nal ubuntu(linux)下谷歌瀏覽器跨域問題 今天在使用谷歌瀏覽器實時調試代碼的時候遇到這樣的錯誤: XMLHttpRequest cannot load http:/
Ubuntu下安裝谷歌瀏覽器命令
googl 獲得 rom 谷歌瀏覽器 www -i 快捷 文章 ref 轉載:http://www.linuxidc.com/Linux/2013-10/91857.htm 對於剛剛開始使用Ubuntu並想安裝谷歌Chrome瀏覽器的新用戶來說,本文所介紹的方法是最快捷的。
Android——谷歌官方下拉刷新控件SwipeRefreshLayout(轉)
reference top 顯示 是個 not ext html blog right 轉自:http://blog.csdn.net/zouzhigang96/article/details/50476402 版權聲明:本文為博主原創文章,未經博主允許不得轉載。
谷歌playstore中應用下載量已超150億次
.cn odi dex odm www wot mdi mdm odex peerjs%E5%AE%9E%E7%8E%B0%E6%B5%8F%E8%A7%88%E5%99%A8%E5%AF%B9%E7%AD%89%E8%BF%9E%E6%8E%A5%E7%9A%84js%E
谷歌花了 2 年時間研究了 180 個團隊,總結出成功的 5 個要素
力量 不用 一個 googl get 管理 new google years 編者按:如何組建一個成功的團隊,是困擾很多管理者的問題。請看這篇由人力資源專家Michael Schneider在inc.com上撰寫的文章Google Spent 2 Years Studyin
谷歌做了45萬次不同類型的文本分類後,總結出一個通用的“模型選擇算法”...
machine 產品 梯度 論壇 系統 例子 per 獲取 tis 谷歌做了45萬次不同類型的文本分類後,總結出一個通用的“模型選擇算法”... 2018年07月25日 17:43:55 閱讀數:6 新智元報道 來源:developers.goo
mac下谷歌chrome瀏覽器的快捷鍵
1. 標籤頁和視窗快捷鍵 ⌘-N 開啟新視窗。 ⌘-T 開啟新標籤頁。 ⌘-Shift-N 在隱身模式下開啟新
如何去除input框在谷歌瀏覽器下的黃色底紋
現象:谷歌瀏覽器下input框有預設記住功能,此時若選擇了歷史輸入的內容,則變成如下圖;非歷史輸入,是沒有的。 方法一 input:-webkit-autofill { -webkit-box-shadow: 0 0 0px 1000px whi
【開發除錯】谷歌瀏覽器中除錯移動網頁和測試網速下頁面效果
、 今天有幸給大家分享一下谷歌瀏覽器針對移動網頁測試的技巧,主要是最近做個微信公共號網站。所以就要對頁面測試拉。移動網頁我們最長測得就是各種手機大小的頁面效果和出現網路問題的效果展示。 今天就簡單分享下在谷歌瀏覽器測試頁面的適配和網速限制展示。 頁面的適配 自帶的手機模式 首先開啟谷歌瀏覽器按F
微信掃碼支付功能(1)---通過谷歌二維碼工具生成付款碼
生成付款二維碼 一、微信網站掃碼支付介紹 1、掃碼支付文件 有關微信支付的流程圖微信官方已經說的很清楚了,這裡也無需其它解釋。這邊採用微信支付掃碼模式二(不依賴商戶平臺設定回撥url),所以在生成二維碼之前 要先呼叫微信統一下單支付介面,獲得code_url,再通過谷歌二維碼工具將c
修改谷歌瀏覽器快取位置總結
啟動Chrome瀏覽器。 在Chrome瀏覽器的位址列輸如chrome:version檢視Chrome瀏覽器儲存檔案的位置 在我的電腦找到上面的個人資料路徑(Profile Path)路徑 Chrome瀏覽器預設的快取檔案在 Cache 資料夾下 把Cache 刪除了,選中 按del,或者右鍵 刪除
ubuntu13.04 環境下中谷歌chromium中安裝Adobe Flsher Player 外掛
1 背景介紹 在使用chromimu瀏覽瀏覽器時,會出現播放不了網頁上的視訊的情況,原因是沒有安裝Adobe Flsher Player 外掛,這時網頁的搜尋欄的下部會提示使用者是否安裝Adobe Flsher Player 外掛,點選安裝外掛,會調轉到Adobe Flsher Player