由於近期項目,要用到google+登陸和google play商店應用內商品支付,以及facebook登陸
所以經過查看官網介紹和示例應用來實現下其中的功能,
下面是使用中遇到的問題,希望對你有用!
歡迎各位,遇到問題給我發郵箱[email protected];或者直接留言回覆.
1.Google+登陸對接android應用
適用於 Android的 Google+登錄
1. 準備工作
3. 退出用戶帳戶
5. 自定義登錄按鈕
6. 本地化
7. 後續步驟
讓用戶安全地登錄您的應用,體驗更強大、更豐富精彩的功能。通過“Google+登錄”,已登錄的用戶可以創建互動信息邀請自己的朋友使用您的應用,從而提升您的應用的參與度。通過使用 Google 將用戶聯繫在一起,您的用戶可以告訴自己的朋友,他們正在使用您的應用。這種口口相傳的社交推薦可信度相當高,能夠很快地提升您在 Google Play中的形象。
Google+登錄按鈕可以對用戶進行身份驗證以及管理 OAuth 2.0流程,這樣可以簡化與 Google API的集成。如果要創建互動信息、管理生活片段和抓取個人資料和人員信息,就必須登錄應用。
用戶隨時可以選擇撤消應用訪問權限。
重要注意事項:您使用 Google+登錄按鈕需要遵守 Google+平臺按鈕政策和 Google+平臺服務條款。
準備工作
您必須創建一個 GoogleAPI控制檯項目並初始化 PlusClient對象。
在Google開發者平臺申請一個專案,然後進入專案詳情;菜單中有API和憑證菜單,找到憑證子菜單,進入主頁面,進行添加Oauth2.0的客戶端id;選擇已安裝的應用程序類型(Android),添加完整的包名和簽名SHA1密文(小寫)。
將“Google+登錄”按鈕添加到您的應用
1. 將 SignInButton 添加到應用的佈局:
<com.google.android.gms.common.SignInButton
android:id="@+id/sign_in_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
2. 使用 Activity.onCreate 處理程序中所請求的 Visible 活動初始化 mPlusClient。
@Override
protectedvoid onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
mPlusClient =newPlusClient.Builder(this,this,this)
.setVisibleActivities("http://schemas.google.com/AddActivity","http://schemas.google.com/BuyActivity")
.build();
}
3. 在 Android活動中,註冊按鈕的 OnClickListener,從而實現在用戶點擊時登錄:
findViewById(R.id.sign_in_button).setOnClickListener(this);
4. 用戶點擊登錄按鈕之後,您應着手解決 mConnectionResult 中記錄的任何連接錯誤。可能的連接錯誤包括提示用戶選擇一個帳戶,以及向授應用予訪問權限。
@Override
publicvoid onClick(View view){
if(view.getId()== R.id.sign_in_button &&!mPlusClient.isConnected()){
if(mConnectionResult ==null){
mConnectionProgressDialog.show();
}else{
try{
mConnectionResult.startResolutionForResult(this, REQUEST_CODE_RESOLVE_ERR);
}catch(SendIntentException e){
// 重新嘗試連接。
mConnectionResult =null;
mPlusClient.connect();
}
}
}
}
5. 用戶成功登錄之後,應用會調用 onConnected 處理程序。此時,您便可以檢索用戶的帳戶名或發送經過身份驗證請求。
@Override
publicvoid onConnected(Bundle connectionHint){
mConnectionProgressDialog.dismiss();
Toast.makeText(this,"Useris connected!",Toast.LENGTH_LONG).show();
}
退出用戶帳戶
您可以爲應用添加退出按鈕。在應用中創建一個按鈕用作退出按鈕。爲按鈕附加 onClickListener,並配置 onClick 方法以斷開 PlusClient:
@Override
publicvoid onClick(View view){
if(view.getId()== R.id.sign_out_button){
if(mPlusClient.isConnected()){
mPlusClient.clearDefaultAccount();
mPlusClient.disconnect();
mPlusClient.connect();
}
returntrue;
}
}
此代碼會清除與應用相關聯的帳戶。要重新登錄,用戶需要重新選擇自己的帳戶。
撤消訪問令牌和取消關聯應用
您必須允許使用 Google帳戶登錄的用戶取消與應用的關聯,以確保遵守 Google+開發者政策的條款。如果用戶刪除了自己的帳戶,您必須刪除應用從 Google API中獲取的信息。
以下代碼顯示了調用 PlusClient.revokeAccessAndDisconnect 方法和響應 onAccessRevoked 事件的簡單示例。
// 在取消關聯之前,請運行 clearDefaultAccount()。
mPlusClient.clearDefaultAccount();
mPlusClient.revokeAccessAndDisconnect(newOnAccessRevokedListener(){
@Override
publicvoid onAccessRevoked(ConnectionResult status){
//mPlusClient 現在已斷開,並且訪問權限已被撤消。
// 觸發應用邏輯以確保遵守開發者政策
}
});
在 onAccessRevoked 回調中,您可以響應事件並在觸發應用或後端代碼中任何適當的邏輯。有關詳情,請參見開發者政策中的刪除規則。
自定義登錄按鈕
您可以設計自定義登錄按鈕,讓它完美地符合自己的設計風格。com.google.android.gms.common.SignInButton 類可讓您更改顏色主題和按鈕的尺寸。如果您需要其他自定義,可以定義一個自定義按鈕:
1. 查看品牌塑造準則以及下載要在按鈕中使用的圖標和圖片。
2. 將按鈕添加到應用佈局中。
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:text="@string/common_signin_button_text_long"/>
此示例加載了 SDK中的經過本地化的文字。您還可以在自己活動 onCreate 的方法中使用getString(com.google.android.gms.R.string.common_signin_button_text_long),爲按鈕文字獲取標籤。不管您如何實施自己的登錄按鈕,都必須要遵守品牌塑造準則。
本地化
SDK可以爲 com.google.android.gms.common.SignInButton 按鈕提供經過本地化的字符串,並且應用的用戶可以自動使用這些字符串。要查看語言的完整列表,您可以查看 SDK 中的以下目錄:<android-sdk-folder>/extras/google/google_play_services/libproject/google-play-services_lib/res/。您會在那裏找到名爲 values-<langcode> 的目錄。2.google play商店應用內商品支付
目錄
1.應用內結算概述
使用應用內結算銷售數字商品,包括一次性商品和定期訂閱。
在 Google Play 上發佈的所有應用均可使用該服務。您只需有 Google Play 開發者控制檯帳戶和 Google 電子錢包商家帳戶即可。
結帳流程由 Google Play 自動處理,其界面與應用購買流程的界面相同。
本文將介紹您需瞭解的應用內結算基本組件和功能,以便您將應用內結算功能添加到應用中。
注意:請務必遵守目標國家/地區(您要在這些國家/地區分發應用)的適用法律。例如,在歐盟國家,不公平商業行爲指令的相關法律禁止直接規勸兒童購買廣告產品或者勸說其父母或其他成年人爲兒童購買廣告產品。請參閱歐盟消費者保護機構的立場,詳細瞭解此主題及其他主題。
應用內結算 API
您的應用會通過相應 API (由設備上安裝的 Google Play 應用提供)來訪問應用內結算服務。然後,Google Play 應用會在您的應用和 Google Play 服務器之間傳送結算請求和響應。實際上,您的應用從不直接與 Google Play 服務器通信,而是通過進程間通信 (IPC) 向 Google Play 應用發送結算請求並接收 Google Play 應用發來的響應。此外,您的應用也不管理其與 Google Play 服務器之間的任何網絡連接。
應用內結算只能在您通過 Google Play 發佈的應用中實施。要完成應用內購買請求,Google Play 應用必須能夠通過網絡訪問 Google Play 服務器。
應用內結算第 3 版是最新版本,依然具有非常廣泛的兼容性,可用於各種 Android 設備。運行 Android 2.2 或更高版本且安裝了最新版本的 Google Play 商店的設備(絕大多數有效設備)都支持使用應用內結算第 3 版。
第 3 版的功能
通過簡化的 API 發送請求。此 API 可讓您輕鬆地向 Google Play 請求商品詳情、訂購應用內商品以及根據用戶對商品的所有權快速恢復商品
訂單信息會在購買完成時同步傳送到設備上
所有購買都是“託管的”(也就是說,Google Play 負責記錄用戶對應用內商品的所有權)。對於同一件應用內商品,用戶無論何時都只能擁有該商品的一個副本而不能擁有多個副本
您可以消耗所購商品。當消耗後,該商品將切換回“未被擁有”狀態,且可被用戶從 Google Play 中再次購買
支持訂閱
要詳細瞭解應用內結算的其他版本,請參閱版本說明。
應用內商品是您在應用內向用戶出售的數字商品,包括遊戲代幣、旨在改善用戶體驗的應用功能升級以及應用中的新增內容。
應用內結算只能用於銷售數字內容,而不能用於銷售實體商品、個人服務或任何需要進行實物交付的商品/服務。與明碼標價的應用不同,一旦用戶購買了應用內商品,系統便不會提供退款窗口。
Google Play 不提供任何形式的內容交付,您需要自行交付在應用內銷售的數字內容。應用內商品始終與一個且僅與一個應用明確關聯。也就是說,在一個應用中不能購買爲另一個應用發佈的應用內商品,即使這兩個應用來自相同的開發者也是如此。
應用內結算支持多種商品類型,因此您可靈活選擇如何通過您的應用獲利。無論是哪種商品,您均能通過 Google Play 開發者控制檯進行定義。
您可以爲應用內結算應用指定以下兩類商品:“託管的應用內商品”和“訂閱”。Google Play 會按用戶帳戶來處理和跟蹤您應用中的應用內商品和訂閱的所有權。詳細瞭解應用內結算第 3 版支持的商品類型。
Google Play 開發者控制檯
在開發者控制檯上,您不僅能發佈應用內結算應用,還能管理您應用中出售的各種應用內商品。
對於與您的應用相關聯的數字商品(包括一次性商品和定期訂閱),您可以爲其創建商品列表。對於每件商品,您都可以定義下列信息:唯一商品 ID(也稱爲 SKU)、商品類型、定價、說明以及 Google Play 應如何處理和用戶對該商品的購買。
您還可以創建測試帳戶,授權這些帳戶測試尚未發佈的應用。
要了解如何使用開發者控制檯配置您的應用內商品和商品列表,請參閱管理應用內結算。
Google Play 購買流程
Google Play 使用的結帳後端服務與用於應用購買的服務相同,因此您的用戶將獲得一致且熟悉的購買流程使用體驗。
重要提示:您必須有 Google 電子錢包商家帳戶才能在 Google Play 上使用應用內結算服務。
購買開始時,您的應用需要針對相應的應用內商品發送結算請求。然後,Google Play 會處理此次交易的所有結帳詳情,包括請求和驗證付款方式以及處理財務交易。
當結帳流程完成後,Google Play 會向您的應用發送購買詳情,例如訂單號、訂單日期和時間以及所付價格。您的應用從不需要處理任何財務交易,這些事宜完全 Google Play 負責。
爲了幫您將應用內結算集成到您的應用中,Android SDK 提供了一個示例應用,向您演示如何在應用內銷售應用內商品和訂閱。
API 第 3 版的 TrivialDrive 示例演示瞭如何使用應用內結算 API 第 3 版在賽車遊戲中實施應用內商品和訂閱購買。該應用不僅演示瞭如何發送應用內結算請求以及處理來自 Google Play 的同步響應,還演示瞭如何通過此 API 記錄商品的消耗情況。第 3 版示例包括多種工具類,非常便於處理應用內結算操作和執行自動簽名驗證。
建議:請務必在發佈應用前混淆其中的代碼。有關詳情,請參閱安全性和設計。
應用內結算 API 第 2 版已棄用,將於 2015 年 1 月關閉。如果您現有的應用內結算實施使用的是 API 第 2 版或更低版本,則您必須遷移到應用內結算第 3 版。
如果您在發佈的應用中銷售應用內商品,請注意以下事項:
您之前在開發者控制檯中定義的託管商品和訂閱仍能使用第 3 版。
對於您已經爲現有應用定義的非託管商品,如果您使用 API 第 3 版針對這些商品提出購買請求,這些商品將被視爲託管商品。您無需在開發者控制檯中爲這些商品創建新的商品條目,且能使用相同的商品 ID 來購買這些商品。如果您使用 API 第 2 版或更低版本提出購買請求,這些商品仍會被視爲非託管商品。
2.管理應用內結算
如果您使用應用內結算,您就無需處理任何財務交易。不過,您仍需執行一些管理任務,包括在Google Play 開發者控制檯上創建和維護您的商品列表、註冊測試帳戶以及在需要時處理退款。
您必須有Google Play 發佈商帳戶才能註冊測試帳戶。而且,您必須有Google 電子錢包商家帳戶才能創建商品列表以及向用戶發放退款。如果您已有Google Play 發佈商帳戶,則可以使用您的現有帳戶,無需註冊新帳戶就能使用應用內結算。
如果您沒有發佈商帳戶,可以在 Google Play 開發者控制檯中以 Google Play 開發者的身份註冊設置一個發佈商帳戶。如果您沒有 Google 電子錢包商家帳戶,也可以通過開發者控制檯註冊一個。
Google Play 開發者控制檯爲您發佈的每個應用都提供一份商品列表。您可以使用 GooglePlay 的應用內結算功能銷售商品,但前提是該商品已在應用的商品列表中列出。每個應用都有自己的商品列表,您不能在某個應用中銷售其他應用的商品列表中列出的商品。
您可以點擊開發者帳戶中列出的應用內的應用內商品鏈接,訪問該應用的商品列表(參見圖 1)。只有當您擁有 Google
電子錢包商家帳戶且該應用的清單中包含 com.android.vending.BILLING
權限時,應用內商品鏈接纔會顯示。
商品列表列出了您在應用內銷售的商品(應用內商品、訂閱內容或兩者的組合)。對於每件商品,商品列表中都會包含商品ID、商品說明和價格等信息。商品列表只存儲應用內所售商品的相關元數據,而不會存儲任何數字內容。應用內銷售的數字內容的存儲和發送是由您負責的。
圖 1. 您可以點擊“應用”主導航面板中的應用內商品鏈接,訪問應用的商品列表。
您可以爲所有已發佈的應用或者Alpha
或Beta
渠道中的所有應用(這些應用上傳並保存到開發者控制檯)創建商品列表。不過,您必須有Google
電子錢包商家帳戶且該應用的清單中必須包含 com.android.vending.BILLING
權限。如果應用的清單中未包含此權限,您只能在商品列表中修改現有商品但不能向該列表添加新商品。要詳細瞭解此權限,請參閱更新您應用的清單。
注意:過去,您可以通過上傳未發佈的“草稿”版本來測試應用,但現在系統已不再支持此功能。因此,您必須將應用發佈到 Alpha 或 Beta 分發渠道,才能進行測試。有關詳情,請參閱草稿應用不再受支持。
此外,一個應用包只能有一個商品列表。如果您爲某個應用創建商品列表且使用多 APK 功能爲該應用分發多個 APK,那麼此商品列表將應用到與該應用商品詳情相關聯的所有 APK 版本。如果您使用的是多 APK 功能,則無法爲各個 APK 創建單獨的商品列表。
您可以通過兩種方式向商品列表添加商品:通過應用內商品界面逐一添加商品(參見圖2);通過導入逗號分隔值(CSV) 文件中的商品批量添加商品。如果您的應用只有幾件應用內商品或您只是向商品列表添加幾件測試商品,那麼逐一添加商品這種方法就非常實用。如果您的應用有大量應用內商品,使用CSV 文件的方法就較爲實用。
注意:目前系統尚不支持批量上傳包含訂閱內容的商品列表。
要通過應用內商品界面向商品列表添加一件商品,請按以下步驟操作:
登錄到您的發佈商帳戶。
在所有應用面板中,點擊相應的應用名稱,然後選擇應用內商品。
點擊添加新商品(參見圖 2),提供所售商品的詳細信息,然後點擊保存或發佈。
圖 2. 通過“添加新商品”頁面,您可以嚮應用的商品列表添加商品。
對於商品列表中的每件商品,您都必須輸入以下信息:
應用內商品 ID
每件商品的ID 在應用的命名空間中都是獨一無二的。商品ID 必須以小寫字母或數字開頭,且只能由小寫字母(a-z)、數字(0-9)、下劃線(_) 和點(.) 組成。商品ID“android.test”是系統預留的ID,所有以“android.test”開頭的商品 ID 都是如此。
此外,商品的商品ID 創建後就無法再修改,而且您不能重複使用任何商品ID。
商品類型
商品類型可以是按用戶帳戶管理的商品、不受管理的商品或訂閱內容。商品類型設置後就無法再更改。有關詳情,請參閱下文中的選擇商品類型。
發佈狀態
商品的發佈狀態可以是已發佈或未發佈。爲了讓用戶在結帳時可以看到所購商品,該商品的發佈狀態必須設置爲已發佈且該商品所屬的應用必須已發佈到 GooglePlay 上。
注意:這種情況並不適用於測試帳戶。也就是說,對於測試帳戶來說,即使應用未發佈而商品已發佈,測試帳戶中的用戶是可以看到該商品的。有關詳情,請參閱測試應用內結算。
語言和翻譯
您可以使用“添加翻譯”按鈕,爲您的應用內商品提供經過本地化的標題和說明。如果您希望 GooglePlay 根據您的默認語言爲您翻譯標題和說明,只需點擊您要提供的語言即可。如果您想自行翻譯成特定語言,也是可以的。默認情況下,應用內商品會沿用其所屬應用的默認語言。
標題
標題是對商品的簡短描述,例如“沉睡藥水”。每個標題在應用的命名空間中必須是獨一無二的,且每件商品都必須有標題。標題在用戶結帳時必須顯示。爲了獲得最佳的顯示效果,標題不應超過25 個字符;不過,標題最長可達55 個字符。
說明
說明是對商品的詳細描述,例如“立即讓服用者陷入沉睡,但對憤怒的精靈無效”。每件商品都必須有一段說明,最長可達 80 個字符。
價格
您必須提供一個以您本地貨幣爲單位的默認價格。您也可以提供以其他貨幣爲單位的價格,但前提是此貨幣所屬的國家/地區是您的應用要定位的目標國家/地區。您可以在 Google Play 開發者控制檯中的“修改應用”頁面上指定目標國家/地區。
要指定以其他貨幣爲單位的價格,您可以手動輸入與每種貨幣對應的價格,也可以點擊自動填充,讓 Google Play 一次性將您的本地貨幣換算成目標貨幣(參見圖 3)。
請注意,訂閱型商品發佈後就無法再更改其價格。
圖 3. 爲應用內商品指定其他貨幣。
要詳細瞭解商品ID 和商品列表,請參閱創建應用內商品 ID。要詳細瞭解定價,請參閱應用內結算定價。
注意:請務必規劃好您的商品 ID 命名空間。商品 ID 保存後就無法再重複使用或更改。
要使用CSV 文件向商品列表批量添加商品,您需要先創建CSV 文件。您在CSV 文件中指定的數據值與您通過應用內商品界面手動指定的數據值相同(請參閱向商品列表逐一添加商品)。
如果您通過CSV 文件導入和導出應用內商品,請記得提供含稅價格。如果您使用自動填充,請提供不含稅的默認價格,系統會自動填充含稅的價格。如果您不使用自動填充,您提供的價格必須是含稅價格。
注意:目前系統尚不支持批量上傳包含訂閱內容的商品列表。
CSV 文件使用逗號 (,) 和分號 (;) 來分隔數據值。逗號用來分隔主要數據值,分號用來分隔次要數據值。例如,CSV 文件的語法如下所示:
"product_id","publish_state","purchase_type","autotranslate ","locale; title; description","autofill","country; price"
相關說明和使用詳情如下所示。
product_id
等同於應用內商品界面中的“應用內商品 ID”設置。如果您指定的“product_id”在商品列表中已經存在,且您選擇在導入 CSV 文件時覆蓋商品列表,則 CSV 文件中指定的值就會覆蓋現有商品的數據。覆蓋功能不會刪除商品列表中已列出但不包含在CSV 文件中的商品。
publish_state
等同於應用內商品界面中的“發佈狀態”設置。值可以是 published
或 unpublished
。
purchase_type
等同於應用內商品界面中的“商品類型”設置。值可以是 managed_by_android
(等同於應用內商品界面中的按用戶帳戶管理的商品)或 managed_by_publisher
(等同於應用內商品界面中的不受管理的商品)。
autotranslate
等同於選中應用內商品界面中的使用自動翻譯填充字段複選框。值可以是 true
或 false
。
locale
等同於應用內商品界面中的“語言”設置。您必須有一個默認語言區域項。默認語言區域必須是語言區域列表中的第一項,且必須包含“title”和“description”。如果除默認語言外您還想提供翻譯版本的“title”和“description”,則必須使用下面的語法規則:
如果“autotranslate”爲 true
,您必須按照以下格式指定默認語言區域、默認標題、默認說明及其他語言區域:
"true,"default_locale; default_locale_title; default_locale_description; locale_2; locale_3,..."
如果“autotranslate”爲 false
,您必須按照以下格式指定默認語言區域、默認標題、默認說明以及翻譯後的標題和說明:
"false,"default_locale; default_locale_title; default_locale_description; locale_2; locale_2_title;local_2_description; locale_3; locale_3_title; locale_3_description;..."
請參見表1,瞭解您可以在“locale”字段中使用的語言代碼的列表。
title
等同於應用內商品界面中的“標題”設置。如果“title”包含分號,必須使用反斜槓進行轉義(例如“\;”)。如果標題本身包含反斜槓,也應使用反斜槓進行轉義(例如“\\”)。
description
等同於應用內商品界面中的“說明”。如果“description”包含分號,則必須使用反斜槓進行轉義(例如“\;”)。如果說明本身包含反斜槓,也應使用反斜槓進行轉義(例如“\\”)。
autofill
等同於點擊應用內商品界面中的自動填充。值可以是 true
或 false
。用於指定“country”和“price”的語法視您使用的“autofill”設置而定。
如果“autofill”設爲 true
,您只需指定採用本地貨幣的默認價格且必須使用以下語法:
"true","default_price_in_home_currency"
如果“autofill”設爲 false
,您需要爲每種貨幣指定“country”和“price”且必須使用以下語法:
"false", "home_country; default_price_in_home_currency; country_2; country_2_price; country_3; country_3_price;..."
country
您爲其指定價格的國家/地區。您只能列出您的應用所定位的國家/地區。國家/地區代碼是按照 ISO 3166-2 的定義,由兩個大寫字母組成的 ISO 國家/地區代碼(例如“US”)。
price
等同於應用內商品界面中的“價格”。此價格必須使用微單位指定。要將貨幣值換算成微單位,請用實際值乘以1,000,000。例如,如果您要以1.99 元銷售某件應用內商品,則需要在“price”字段中輸入 1990000。
表 1. 您可以在“locale”字段中使用的語言代碼。
語言 |
代碼 |
語言 |
代碼 |
中文 |
zh_TW |
意大利語 |
it_IT |
捷克語 |
cs_CZ |
日語 |
ja_JP |
丹麥語 |
da_DK |
韓語 |
ko_KR |
荷蘭語 |
nl_NL |
挪威語 |
no_NO |
英語 |
en_US |
波蘭語 |
pl_PL |
法語 |
fr_FR |
葡萄牙語 |
pt_PT |
芬蘭語 |
fi_FI |
俄語 |
ru_RU |
德語 |
de_DE |
西班牙語 |
es_ES |
希伯來語 |
iw_IL |
瑞典語 |
sv_SE |
印地語 |
hi_IN |
-- |
-- |
要導入您在CSV 文件中指定的商品,請執行以下操作:
登錄到您的發佈商帳戶。
在所有應用面板中,點擊相應的應用名稱,然後選擇應用內商品。
在“應用內商品列表”頁面上,點擊導入/導出 > 從 CSV 文件中導入應用內商品,然後選擇 CSV 文件。
CSV 文件必須位於您的本地計算機上或連接到您計算機的本地磁盤上。
如果您想覆蓋商品列表中的現有商品,請選中覆蓋複選框。
只有當CSV 文件中的“product_id”值與商品列表中現有商品的應用內商品 ID 一致時,此選項纔會覆蓋現有商品的值。覆蓋功能不會刪除商品列表中已列出但不包含在CSV 文件中的商品。
您還可以點擊“應用內商品列表”頁面上的導出爲CSV,將現有商品列表導出爲CSV 文件。如果您已將商品手動添加到商品列表,但現在想開始通過CSV 文件管理該商品列表,此功能就非常有用。
商品的商品類型用來控制Google Play 如何管理該商品的購買流程。商品類型有以下三種:“按用戶帳戶管理的商品”、“不受管理的商品”和“訂閱內容”。但請注意,不同版本的應用內結算服務支持的商品類型不同,因此務必根據您的應用所用的應用內結算版本,選擇合適的商品類型。
有關詳情,請參閱應用內結算第 3 版或應用內結算第 2 版的相關文檔。
應用內結算不允許用戶向Google Play 發送退款申請。應用內購買的退款事宜必須直接發送給您(應用開發者)。然後,您可以通過您的Google 電子錢包商家帳戶處理這筆退款。當您處理退款時,GooglePlay 會收到Google 電子錢包發來的退款通知,並且Google Play 會向您的應用發送退款消息。有關詳情,請參閱處理 IN_APP_NOTIFY 消息和應用內結算定價。
重要提示:您不能使用 Google Wallet API 發放退款或取消應用內結算交易,而是必須通過您的 Google 電子錢包商家帳戶手動執行此類操作。不過,您可以使用 GoogleWallet API 檢索訂單信息。
當用戶購買應用內商品時,Google電子錢包會爲此次交易分配一個永久有效且獨一無二的訂單號。GooglePlay
在購買流程結束時會向您提供該訂單號,作爲 PURCHASE_STATE_CHANGED
Intent
中的 orderId
字段的值。
在您的應用中,您可以使用該訂單號作爲此次應用內購買交易的通用標識符。購買後,您可以利用該訂單號在對帳報表中跟蹤此次交易,以及在提供客戶支持時使用該訂單號。
訂單號是完全由數字構成的字符串,格式由Google 電子錢包指定和管理。
對於發生在2012
年12 月5
日及以後的交易,Google電子錢包會分配一個商家訂單號(而非Google
訂單號)並將該商家訂單號報告爲 orderID
的值。示例如下:
"orderId":"12999556515565155651.5565135565155651"
對於發生在2012
年12 月5
日之前的交易,GoogleCheckout
分配的是Google
訂單號並已將該編號報告爲orderID
的值。下面是使用 Google
訂單號的 orderID
的示例:
"orderId":"556515565155651"
通過Google Play 開發者控制檯,您可以設置一個或多個測試帳戶。測試帳戶是您在開發者控制檯上註冊爲測試帳戶的常規Google 帳戶。測試帳戶已獲得授權,可從您已上傳到Google Play 開發者控制檯但尚未發佈的應用中進行應用內購買。
您可以使用任意Google 帳戶作爲測試帳戶。如果您想讓多位用戶在應用上測試應用內結算但又不想讓他們獲得您的發佈商帳戶的登錄憑據,測試帳戶就非常有用。如果您想擁有並控制測試帳戶,可以自行創建帳戶,然後將憑據分發給您的開發者或測試者。
測試帳戶有三條限制:
測試帳戶用戶只能在已上傳到您的發佈商帳戶的應用(該應用可以是尚未發佈的)中提出購買請求。
測試帳戶只能用來購買應用的商品列表中已列出(並已發佈)的商品。
測試帳戶用戶無法訪問您的發佈商帳戶,也不能向您的發佈商帳戶上傳應用。
要向您的發佈商帳戶添加測試帳戶,請按以下步驟操作:
登錄到您的發佈商帳戶。
點擊設置圖標。
找到“許可測試”面板。
添加您要註冊爲測試帳戶的電子郵件地址,各帳戶之間用英文逗號分隔。
點擊保存,保存您的個人資料更改。
Google Play 開發者控制檯爲每個應用都提供一個公用的許可密鑰。要獲取應用的密鑰,請按以下步驟操作:
打開所有應用面板。
點擊相應的應用名稱,然後選擇服務和 API。
向下滾動到此應用的許可密鑰字段,找到應用的密鑰,如下圖所示。
過去,開發者控制檯爲每個開發者帳戶都提供一個公鑰。爲了將應用遷移到按應用分配的新公鑰,開發者控制檯將應用專用密鑰設置爲之前的開發者密鑰。這樣做可確保依賴於(之前的)開發者密鑰的應用能與新公鑰兼容。
圖 4. 您可以在服務和 API 面板中找到各個應用的許可密鑰。
如果您在實施應用內結算時有疑問或遇到問題,請與下表列出的支持資源聯繫(參見表2)。將您的問題發佈到正確的論壇上,可以更快獲得所需支持。
表 2. 適用於 Google Play 應用內結算的開發者支持資源
支持類型 |
資源 |
主題範圍 |
開發與測試問題 |
Google 網上論壇:android-developers |
應用內結算集成問題、有關用戶體驗的提示、對響應的處理、混淆代碼、進程間通信 (IPC)、測試環境設置。 |
結算問題跟蹤器 |
與應用內結算示例代碼直接相關的錯誤和問題報告。 |
要了解如何向上述所列論壇發帖的一般信息,請參閱“資源”標籤中的開發者論壇一文。
3.Facebook登陸對接android應用
一,準備好開發者賬號
開發者賬號怎麼設置我就不說了。和人人平臺基本一樣。很多平臺都這樣。
在得到 Application ID (App ID/ API Key)和 Application secret(App Secret)之後,記錄好這兩項,準備做接入。當然,還要牢記你自己的Canvas Page。
好,下一步。在開發者賬號創建了這個應用之後,你可以訪問一下Canves Page。
例如:http://apps.facebook.com/xxxapptest/
看一下效果。正常的話,可以看到連接到你的網站主頁上了。
Facebook平臺的身份驗證和授權是基於OAuth 2.0協議的( OAuth 2.0 protocol )。
用戶在登錄之後可以有兩種方式做身份驗證和授權:服務器端(server-side)和客戶端(client-side)。無論用哪種,都需要遵守下面的三步:用戶身份驗證(user authentication),用戶授權(app authorization),和應用身份驗證(app authentication)。 用戶身份驗證是確認用戶身份;用戶授權是讓用戶確認將會提供給應用什麼樣的個人數據和內容;應用身份驗證是確認用戶把他們的資料給的是你的應用,而不是別人。一旦這些步驟完成了,你的應用將會獲得到一個用戶訪問令牌( user access token ),這樣你的應用就能獲取到用戶的信息,並且可以獲取到用戶的活動和行爲了。
----------------------------------------------------------------------------------------------
1. 用戶授權(user authorization)
下邊我只說服務器端的認證授權流程。
獲取用戶基本信息的授權方式:
用戶第一次登陸,facebook把用戶跳轉到我們的應用服務器,那麼我們要調用這樣一個url:
https://www.facebook.com/dialog/oauth?client_id=YOUR_APP_ID&redirect_uri=YOUR_URL
其實就是調用facebook的標準認證對話框(OAuth Dialog)。如果用戶點擊確認了,注意,這個授權,應用只能是獲取到用戶的基本信息的,也就是facebook上用戶的公共信息。例如ID,主頁,用戶的名字。
獲取用戶的其他信息的授權方式:
如果想獲取到用戶的其他信息,就必須明確的告訴用戶,你的應用需要哪些用戶的信息,像下面這樣:
https://www.facebook.com/dialog/oauth?client_id=YOUR_APP_ID&redirect_uri=YOUR_URL&scope=email,read_stream
scope參數裏面,指定了你的應用想要獲取的用戶信息。
用戶同意授權
假如用戶點擊了同意(Allow),那麼你的應用就會被用戶授權了。授權對話框( OAuth Dialog)將會帶着認證碼(authorization code)參數跳轉(via HTTP 302)到你的服務器的url。我查看了整個授權後的request,發現,facebook把認證碼放在了GET裏,其他的信息在POST裏。GET裏面會有一個code參數,好長一串,這個就是授權碼。有了這個code,我們就可以進行下一步應用身份驗證了。
----------------------------------------------------------------------------------------------
2. 應用身份驗證(app authentication)
爲了驗證你的應用(app),你必須把上面得到的授權碼(authorization code)和你的應用密鑰(App Secret)傳給 Graph API的令牌終點( tokenendpoint):
https://graph.facebook.com/oauth/access_token
格式是這樣的:
https://graph.facebook.com/oauth/access_token?
client_id=YOUR_APP_ID&redirect_uri=YOUR_URL&
client_secret=YOUR_APP_SECRET&code=THE_CODE_FROM_ABOVE
如果你的應用成功的通過了認證,並且你的用戶的授權碼也是合法的,那麼授權服務器將會返回訪問令牌(access token)。
----------------------------------------------------------------------------------------------
現在我們來看一下,網站接收到的facebook傳來的request的POST數據:
注意,此時是在沒有授權的情況下,從平臺發過來的請求。
u'fb_sig_time': [u'1310471486.9658'],
u'fb_sig_added': [u'0'],
u'fb_sig_locale': [u'zh_CN'],
u'fb_sig_in_iframe': [u'1'],
u'fb_sig_in_new_facebook': [u'1'],
u'fb_sig_country': [u'us'],
u'fb_sig':[u'6edf97802d706b84753a4a328d65b1cc'],
u'fb_sig_api_key':[u'6361833388ca80696ad667af7abcceee'],
u'fb_sig_app_id': [u'120306072668168']
好,按照facebook的規則,要想得到用戶的信息,你的這個應用必須得到用戶的授權(Authorization)。這個授權,就好比,用戶在facebook上,確認安裝你的遊戲。
授權的格式,開發者文檔寫的很明白:
https://www.facebook.com/dialog/oauth?
client_id=YOUR_APP_ID&redirect_uri=YOUR_CANVAS_PAGE
上面我們說的Application ID(app ID)和Canves Page在這裏就能用得上了。
在瀏覽器中輸入這個授權url,就會看到你的應用的用戶授權頁。
當用戶點擊確定授權的時候,facebook將會給我們的網站發來這樣的request內容:
POST:
u'fb_sig_time': [u'1310627493.7758'],
u'fb_sig_added': [u'1'],
u'fb_sig_locale': [u'zh_CN'],
u'fb_sig_in_iframe': [u'1'],
u'fb_sig_in_new_facebook': [u'1'],
u'fb_sig_profile_update_time': [u'1256108103'],
u'fb_sig_country': [u'us'],
u'fb_sig_ss': [u's2Ke_YrygH7T8aEd9Lmcrg__'],
u'fb_sig_user': [u'100000413372683'],
u'fb_sig_cookie_sig':[u'3bce4346fd8f2f62c347eae9e89ae2d8'],
u'fb_sig_session_key': [u'2.AQC9WncK12nGzWCn.3600.1310634000.0-100000413372683'],
u'fb_sig_expires': [u'1310634000'],
u'fb_sig': [u'af28d8df0e0ec5fbbf01ec430622278d'],
u'fb_sig_api_key':[u'6361833388ca80696ad667af7abcceee'],
u'fb_sig_app_id': [u'120306072668168']
可以看見,POST裏面已經有了uid了。
授權(authorization)
爲了給用戶創造人性化(personalize)的體驗,Facebook將把用戶的信息,在用戶允許的情況下發送給你的應用。這些信息將通過HTTP POST裏的 signed_request 參數傳給你的應用。 signed_request 其實就是一個經過base64url 編碼的JSON對象。所以,在你解碼之前,signed_request的內容看上去就是一個用點(.)分割的長串數據。
用戶第一次訪問你的應用的時候,signed_request參數只包含下面這些數據(如果你看不到數據,只看到一長串字母數字,那請先看下邊的解碼簽名請求)。可以看到,幾乎沒有什麼有用的用戶數據:
Name |
Description |
user |
A JSON array containing the locale string, country string and the age object (containing the min and max numbers of the age range) for the current user. 裏面只有local,county,和age 沒有uid和token! |
algorithm |
A JSON string containing the mechanism used to sign the request. |
issued_at |
A JSON number containing the Unix timestamp when the request was signed. |
爲了獲取有用的用戶信息,比如用戶在Facebook的ID,那麼你需要得到用戶的授權。官方建議是使用認證對話框(OAuth Dialog)進行用戶對應用的授權。怎麼引用這個對話框,進行授權呢?其實就是在你的服務器端或者頁面端,跳轉到 Facebook指定的URL。這個URL規則如下:
https://www.facebook.com/dialog/oauth?client_id=YOUR_APP_ID&redirect_uri=YOUR_CANVAS_PAGE
當跳轉到這個URL的時候,就會出現facebook標準的認證對話框了。注意,上面這種規則的URL授權對話框,你的應用只能是獲取到用戶的基本信息的,也就是facebook上用戶的公共信息。例如ID,主頁,用戶的名字。如果你想獲取到用戶的其他信息,就必須明確的告訴用戶,你的應用需要獲取哪些用戶的信息,像下面這樣:
https://www.facebook.com/dialog/oauth?client_id=YOUR_APP_ID&redirect_uri=YOUR_URL&scope=email,read_stream
注意,scope參數裏面,指定了你的應用想要獲取的用戶信息。
假如用戶點擊了同意(allow),那麼用戶就對應用授權了。授權後,signed_request參數將含下面這些數據。可以看到,可以得到重要的兩項:用戶的id,就是user_id;和oauth_token。
Name |
Description |
user |
A JSON array containing the locale string, country string and the age object (containing the min and max numbers of the age range) for the current user. |
algorithm |
A JSON string containing the mechanism used to sign the request. |
issued_at |
A JSON number containing the Unix timestamp when the request was signed. |
user_id |
A JSON string containing the Facebook user identifier (UID) of the current user. |
oauth_token |
A JSON string that you can pass to the Graph API or the Legacy REST API. |
expires |
A JSON number containing the Unix timestamp when the oauth_token expires. |
解碼簽名請求(Decode Signed Request)
Facebook把請求做了簽名。形成了signed_request這個東西。signed_request 其實就是一個經過base64url 編碼的JSON對象。直接取過來,就是一個用"."分割的字符串。我們要做的,是把點前面的字符串解碼,就是驗證是否是facebook的合法sig;把點後面的字符串解碼,就是facebook傳給你應用的具體數據data。
具體算法python版:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
# reques就是facebook發過來的請求 params = request.POST.copy() signed_request = params.get('signed_request') # signed_request傳到python這邊, 數據結構是一個字符串型的list if isinstance(signed_request, list): signed_request = signed_request[0] encoded_sig, payload = signed_request.split(".", 2)
# 餘數2, 那麼需要補一個= payload = str(payload) if len(payload)%3 == 2: payload += '=' # 餘數1, 那麼需要補兩個= if len(payload)%3 == 1: payload += '==' # urlsafe_b64decode() Decode string s using a URL-safe alphabet, # which substitutes - instead of + and _ instead of / in the standard Base64 alphabet. # 得到data data = simplejson.loads(base64.urlsafe_b64decode(payload))
# 得到sig encoded_sig = str(encoded_sig) if len(encoded_sig)%3 == 2: encoded_sig += '=' if len(encoded_sig)%3 == 1: encoded_sig += '==' sig = base64.urlsafe_b64decode(encoded_sig) |
經過上面的解碼簽名請求後,可以獲取到FB的數據了。就是上面代碼裏的data。如果裏面有'user_id'那麼就說明,uid和oauth_toke都有了。請注意,如果您用的是國內服務器,是不可以直接調用facebook API接口的。
1 2 3 4 5 |
if 'user_id' in data: uid = data['user_id'] params_dic = {} params_dic['uid'] = uid params_dic['oauth_token'] = data['oauth_token'] |
有了這uid和oauth_toke,我們就可以獲取其他的用戶信息了。下面是獲取幾個重要接入屬性的方法。如果不明白爲什麼這麼寫,可以參考facebook開發文檔。
用戶暱稱:
graph_url ="https://graph.facebook.com/%s" % uid
facebook_usr_info = simplejson.loads( urllib2.urlopen(graph_url).read() )
name = facebook_usr_info['name']
好友列表:
graph_url ="https://graph.facebook.com/me/friends?access_token=%s" % oauth_token
f_dic = simplejson.loads(urllib2.urlopen(graph_url).read())
friends_ids = f_dic['data']
頭像:
headurl = 'http://graph.facebook.com/' + uid + '/picture'
注意事項:
首先需要在facebook 開發者平臺https://developers.facebook.com/
註冊你的app程序,選擇Android,下一步就會彈出中文使用步驟。包括SDK下載安裝等。
1.點擊新建的app,進入桌面工作臺,可以看到AppID和App Secret
2.左側Settings菜單進入,設置DisplayName Namespace;下面有Android板塊填寫對應的
Google Play Package Name、Class Name、Key Hashes。
3.左側Status & Review菜單進入,設置Status爲Yes,點擊確定,把需要填寫和確認的都確認。