這個主題說明玩家在 Google Play 應用程式中透過 Play 點數購買應用程式內產品後,應如何偵測及提供應用程式內產品。
使用者在 Google Play 應用程式中用 Play 點數兌換應用程式內產品後,產品就會立即出現在遊戲中。以下是使用者如何透過 Play 點數購買商品。
1. 按一下「Play 點數」。 | 1. 點選「使用」分頁標籤以查看項目。 | 2. 選取所需產品並點選「使用點數」即可完成購買。 | 3. 接收產品。 |
在本例中,在購買產品時遊戲並未執行。即便裝置上尚未安裝遊戲,使用者也能透過 Play 點數兌換產品。因此,您必須設計遊戲,處理遊戲內外的應用程式內產品交付。
事前準備
您必須建立產品和 Play 點數促銷活動,才能偵測並提供應用程式內產品。
提交規範
透過 Play 點數促銷活動在遊戲中提交應用程式內產品時,您必須遵守本節的規定。
提交時間
當玩家為應用程式內產品兌換 Play 點數時,您必須立即提交產品,且玩家不必重新啟動遊戲。如果必須事先完成遊戲內容 (例如完成教學課程),則必須在這之後立即提交產品。
提交訊息
使用者在遊戲外購買應用程式內產品並返回遊戲後,您必須顯示確認訊息,告知產品已在遊戲中順利授予使用者。此訊息應以彈出式對話方塊或遊戲內訊息的方式顯示。且您不應該要求使用者必須執行任何額外步驟,才能接收兌換的項目。
所需訊息格式如下:
清楚指出使用者已收到兌換項目。
清楚提及產目名稱並提及「Play 點數」,確保使用者能夠區分 Play 點數和他們收到的內容。
如果您提供了多種面額的類似項目,項目名稱中也應包括正確的面額。
彈出式對話方塊、訊息或遊戲內通知應持續顯示,直到使用者點選「繼續」或「確定」等確認訊息為止。這類內容不應該有取消按鈕,原因是這種訊息的用意在於通知使用者已在遊戲中收到兌換的項目。如果沒有確認按鈕,那麼這則訊息必須在畫面上顯示至少 3 秒,確保使用者瞭解已收到兌換的項目。
以下是訊息範例:
「收到的產品!您已使用 Play 點數兌換 100 顆寶石。繼續。」
使用者應可看到相關動畫或確認用的視覺效果,象徵遊戲代幣的餘額增加。如果兌換產品是永久性或消耗性的應用程式內產品,則應將使用者導向遊戲中解鎖該產品的位置,或是可取得該產品的地方。
偵測遊戲以外的產品
如果您的遊戲使用 Google Play 帳款服務程式庫,請進行下列變更,以偵測在遊戲外收到的應用程式內產品。
在遊戲的
onResume()
回呼中,呼叫queryPurchases()
方法以擷取產品清單,藉此判斷哪些產品未確認。如果您的遊戲設有伺服器,我們強烈建議您從您的伺服器確認購買交易,方法是使用訂閱和應用程式內購 API
如果有現成的未確認產目,請使用
consumeAsync()
確認消耗性產品,或透過acknowledgePurchase()
確認非消耗性產品。對遊戲中已購產品進行授權。
偵測透過分割畫面模式接收的項目
如果您的遊戲支援多視窗模式,使用者可以在同時執行 Play 商店應用程式和遊戲時兌換 Play 點數並接收產品。這張螢幕截圖顯示了範例:
如要透過 Google Play 帳款服務程式庫支援此情境,請執行下列操作:
Google Play 會呼叫
onPurchasesUpdated()
方法,通知遊戲有新的待處理的項目。如果您的遊戲設有伺服器,我們強烈建議您從您的伺服器確認購買交易,方法是使用訂閱和應用程式內購 API
針對消耗性產品使用
consumeAsync()
進行確認,或是使用acknowledgePurchase()
確認非消耗性產品。對遊戲中已購產品進行授權。
顯示提交確認資訊
使用者兌換 Play 點數並收到交換產品時,會希望遊戲顯示遊戲內訊息,或使用某種通知來告知遊戲已確實收到點數並處理產品。以下為幾個提交確認選項:
顯示遊戲內的彈出式視窗。
將訊息傳送至遊戲內訊息方塊,並明確指出遊戲內訊息方塊中有新訊息。
使用作業系統通知訊息。
當收到促銷產品時 (包括未安裝在裝置上),遊戲可能處於任何狀態。無論收到產品時遊戲的狀態為何,您必須偵測促銷產品。然而,在某些例外情況下,我們可能不會立即通知使用者已收到項目。例如:
在遊戲操作期間,顯示訊息可能會分散使用者的注意力。在這種情況下,您必須在操作結束後通知使用者。
在剪輯過程中,顯示訊息可能會分散使用者的注意力。在此情況下,您必須在過場畫面結束後通知使用者。
遊戲的初始教學課程和使用者設定期間。建議您在使用者開啟遊戲後或初次進行使用者設定期間,立即向新使用者發出獎勵通知。不過,也可以等到主要遊戲序列可通知使用者為止。
如果您的應用程式含有多個可套用該項目的字元或帳戶,建議使用者選取要收到促銷產品的帳戶。
決定通知促銷訊息的時機和方式時,請將使用者納入考量。假如使用者沒有立即收到通知,可能會感到困惑,可能會停止使用您的應用程式、聯絡使用者支援團隊,或在社群媒體上投訴。
特定遊戲引擎的更新內容
以下是關於特定遊戲引擎的注意事項:
如果您的遊戲是以 Unity 建構,建議您驗證目前使用的應用程式內購實作項目是否已支援 Play 點數促銷活動。
如果您的遊戲是以 Cocos2d-x 或 Unreal Engine (C/C++) 建構,您很可能需要編寫 JNI 程式碼,從 C/C++ 程式碼呼叫 Java API。
伺服器端最佳做法
本節包含用於 Play 點數促銷活動的伺服器端最佳做法:
如果您在伺服器中呼叫
Purchases.products: get
,請根據productId
值,檢查是否需要分別處理 Play 獎勵兌換產品和其他應用程式內產品。如果您在伺服器中使用
Inappproducts: list
,請確認您是否需要透過productId
值將 Play 獎勵兌換產品與其他應用程式內產品分開。請查看下列最佳做法,確認是否需要進行其他變更:
- 參考資料:
- 實作伺服器端簽名驗證。
- 確認
purchaseToken
和orderId
的值不得重複,且未曾使用過。
疑難排解
本節提供可能導致客戶查詢情境的相關建議。
多用戶帳戶
如果使用者在裝置上設有多個 Google 帳戶,並在錯誤的帳戶兌換 Play 點數,Google 無法將這些產品轉移至其他帳戶。同理,您的應用程式無法呼叫 getPurchases()
方法轉移產品。在這種情況下,請考慮透過客戶服務作業,手動提供應用程式內產品。
延遲或遺失產品
如果玩家遇到延遲或遺漏的獎勵產品,請參閱 Google Play 說明文件的應用程式內購疑難排解指南。