在 Unity 項目中使用 Google Play 結(jié)算庫

來源: Google Developers
作者:Google Developers
時間:2021-01-06
18287
Google Play結(jié)算服務(wù)插件擴展了Unity的應(yīng)用內(nèi)購買內(nèi)置服務(wù)和資產(chǎn)(名為Unity IAP),可以為您的游戲提供Google Play結(jié)算庫的所有最新功能。本指南介紹了如何設(shè)置您的項目以使用此插件,還介紹了如何在通過Unity開發(fā)的游戲中實現(xiàn)結(jié)算庫功能。

Google Play結(jié)算服務(wù)插件擴展了Unity的應(yīng)用內(nèi)購買內(nèi)置服務(wù)和資產(chǎn)(名為Unity IAP),可以為您的游戲提供Google Play結(jié)算庫的所有最新功能。本指南介紹了如何設(shè)置您的項目以使用此插件,還介紹了如何在通過Unity開發(fā)的游戲中實現(xiàn)結(jié)算庫功能。

設(shè)置Google Play結(jié)算服務(wù)插件

如需設(shè)置此插件,請完成以下每個鏈接部分中的步驟:

啟用Unity IAP抽象層。

下載并導(dǎo)入插件。

配置插件的構(gòu)建設(shè)置。

啟用插件。

啟用Unity IAP抽象層

Google Play結(jié)算服務(wù)插件基于Unity IAP中自帶的抽象層,因此您需要啟用此抽象層后才能下載并導(dǎo)入該插件。如需啟用Unity IAP抽象層,請執(zhí)行以下操作:

完成以下Unity教程中的所有步驟:針對Unity服務(wù)設(shè)置項目。

完成以下Unity教程中的所有步驟:啟用Unity IAP服務(wù)。

下載并導(dǎo)入插件

插件將作為.unitypackage格式的Unity軟件包提供。如需下載并導(dǎo)入插件,請按以下步驟操作:

從代碼庫的GitHub版本頁面中下載適用于Unity的最新版Google Play插件。

在Unity菜單欄中,依次點擊Assets>Import Package>Custom Package。

找到.unitypackage文件的下載位置并選擇該文件。

在Import Unity Package對話框中,選擇所有資產(chǎn)并點擊Import。

軟件包導(dǎo)入后,系統(tǒng)會在項目的資產(chǎn)中添加一個名為GooglePlayPlugins的新文件夾(位于Assets文件夾的根目錄下)。此文件夾包含插件的所有結(jié)算庫資產(chǎn)。

配置構(gòu)建設(shè)置

由于插件擴展了Unity IAP,因此除非從build中移除Unity IAP中一些較舊的重疊依賴項,否則Unity會遇到?jīng)_突且無法構(gòu)建Android APK。插件提供了一種從項目中自動移除沖突庫的方法。如需解決這些沖突,請按以下步驟操作:

從Unity菜單欄中依次選擇Google>Play Billing>Build Settings。

在“Play Billing Build Settings”窗口中,點擊Fix。這樣就可以解決沖突并將沖突的Unity IAP文件移至備份目錄。點擊Fix后,該按鈕會變成Restore,點擊后可恢復(fù)原始的沖突文件。

啟用插件

如需啟用插件,請將Google Play的Unity IAP實現(xiàn)替換為Google Play結(jié)算服務(wù)插件。例如,使用Unity IAP購買者腳本時,您要更改傳遞到IAP構(gòu)建器中的StandardPurchaseModule以使用Google.Play.Billing.GooglePlayStoreModule:

//Create a builder using the GooglePlayStoreModule.

var configurationBuilder=

ConfigurationBuilder.Instance(Google.Play.Billing.GooglePlayStoreModule.Instance());

注意:為了避免與Unity的標準IAP實現(xiàn)發(fā)生沖突,每當代碼引用Google Play結(jié)算服務(wù)插件中的公共類時,您都應(yīng)該通過包含Google.Play.Billing完整地指定命名空間。本指南中的所有代碼示例均采用此方法。

如果您的游戲?qū)⑼粋€購買者腳本用于多個平臺,應(yīng)添加一項平臺檢查,確保Unity針對其他平臺繼續(xù)使用自己的IAP解決方案:

ConfigurationBuilder builder;

if(Application.platform==RuntimePlatform.Android)

{

builder=ConfigurationBuilder.Instance(

Google.Play.Billing.GooglePlayStoreModule.Instance());

}

else

{

builder=ConfigurationBuilder.Instance(StandardPurchasingModule.Instance());

}

如果您在除Google Play商店以外的其他Android應(yīng)用商店中發(fā)布游戲,則只有在選擇Google Play商店時才應(yīng)替換默認的Unity IAP實現(xiàn):

ConfigurationBuilder builder;

if(Application.platform==RuntimePlatform.Android

&&SelectedAndoidAppStore==AppStore.GooglePlay)

{

builder=ConfigurationBuilder.Instance(

Google.Play.Billing.GooglePlayStoreModule.Instance());

}

else

{

builder=ConfigurationBuilder.Instance(StandardPurchasingModule.Instance());

}

在游戲中實現(xiàn)Google Play結(jié)算庫功能

Google Play結(jié)算服務(wù)插件擴展了Unity IAP服務(wù),因此您可以使用相同的Unity API管理通用的購買流程。請注意,由于結(jié)算庫與其他應(yīng)用商店的Unity標準IAP實現(xiàn)之間存在差異,因此API行為也發(fā)生了一些細微變化。如果您是Unity IAP API新手,請參閱Unity IAP教程中的“Making a Purchase Script”部分,通過示例了解如何實現(xiàn)基本購買流程。

結(jié)算庫還包括一些Google Play商店獨有的功能。您可以通過擴展接口訪問這些功能。本部分的其余內(nèi)容介紹了如何在游戲中實現(xiàn)這些獨有的結(jié)算庫功能。

啟用推遲購買功能

Google Play支持推遲購買(也稱為待處理的交易或待處理的購買交易),在這種情況下,用戶可以創(chuàng)建購買交易并稍后在實體店中使用現(xiàn)金完成購買交易。

如需啟用推遲購買功能,請在IAP構(gòu)建器中調(diào)用EnableDeferredPurchase()方法修改模塊配置:

//Create a builder using a GooglePlayStoreModule.

var configurationBuilder=

ConfigurationBuilder.Instance(Google.Play.Billing.GooglePlayStoreModule.Instance());

//Enable deferred purchases

configurationBuilder.Configure<Google.Play.Billing.IGooglePlayConfiguration>()

.EnableDeferredPurchase();

接下來,使用Play商店擴展程序?qū)崿F(xiàn)推遲購買回調(diào):

//Get the plugin extensions for the Google Play Store.

_playStoreExtensions=

extensions.GetExtension<Google.Play.Billing.IGooglePlayStoreExtensions>();

//Set the deferred purchases callback.

_playStoreExtensions.SetDeferredPurchaseListener(

delegate(Product product)

{

//Do not grant the item here.Instead,record the purchase and remind

//the user to complete the transaction in the Play Store.

});

向Google Play傳遞經(jīng)過混淆處理的帳號ID

您可以向Google Play傳遞經(jīng)過混淆處理的用戶帳號ID以方便檢測濫用行為,例如檢測是否有大量設(shè)備在短時間內(nèi)使用同一帳號進行購買。

注意:此帳號ID也會與購買數(shù)據(jù)一起返回。如果您使用開發(fā)者載荷識別用戶,則可以使用此帳號ID取而代之。

如需傳遞經(jīng)過混淆處理的帳號ID,請從擴展程序API調(diào)用SetObfuscatedAccountId()方法:

//Get the plugin extensions for the Google Play Store.

_playStoreExtensions=

extensions.GetExtension<Google.Play.Billing.IGooglePlayStoreExtensions>();

//Pass an obfuscated account ID.

_playStoreExtensions.SetObfuscatedAccountId(obfuscatedAccountId);

向Google Play傳遞經(jīng)過混淆處理的個人資料ID

您可以向Google Play傳遞經(jīng)過混淆處理的個人資料ID以方便檢測欺詐行為,例如檢測是否有大量設(shè)備在短時間內(nèi)使用同一帳號進行購買。這與傳遞經(jīng)過混淆處理的用戶帳號ID類似。在這兩種情況下,ID都代表單個用戶,但是個人資料ID可以幫助您從單個應(yīng)用中的多份個人資料里唯一識別出單個用戶。向Google Play傳遞經(jīng)過混淆處理的個人資料ID后,您日后便可以在購買收據(jù)中檢索此ID。

如需傳遞經(jīng)過混淆處理的個人資料ID,請在IAP構(gòu)建器中調(diào)用SetObfuscatedProfileId()方法修改模塊配置:

//Get the plugin extensions for the Google Play Store.

_playStoreExtensions=

extensions.GetExtension<Google.Play.Billing.IGooglePlayStoreExtensions>();

//Pass an obfuscated profile ID.

_playStoreExtensions.SetObfuscatedProfileId(obfuscatedProfileId);

確認訂閱的價格變動

您可以通過Google Play更改有效訂閱的價格。游戲的用戶必須先確認任何價格變動,然后更改才能生效。如需提示用戶確認其訂閱的價格變動,請調(diào)用ConfirmSubscriptionPriceChange()方法:

//Get the plugin extensions for the Google Play Store.

_playStoreExtensions=

extensions.GetExtension<Google.Play.Billing.IGooglePlayStoreExtensions>();

_playStoreExtensions.ConfirmSubscriptionPriceChange(productId,

delegate(bool success)

{

//Returns whether the user has accepted the new price or not.

});

Unity API行為的變化

在您使用Google Play結(jié)算服務(wù)插件時,大多數(shù)API行為與其他應(yīng)用商店的Unity標準IAP實現(xiàn)的行為相同。但在某些情況下,API的行為會有所不同。本部分介紹了這些行為差異。

不支持開發(fā)者載荷

Google Play已棄用開發(fā)者載荷,并用更有意義且更相關(guān)的替代方法代替它。因此,API不支持開發(fā)者載荷。如需詳細了解替代方法,請參閱開發(fā)者載荷的相關(guān)頁面。

您可以繼續(xù)在其他應(yīng)用商店中使用Unity標準IAP實現(xiàn)所定義的接口,包括IStoreControllor。當您提示購買時,您仍可使用IStoreControllor并調(diào)用InitiatePurchase()方法:

public void InitiatePurchase(Purchasing.Product product,string payload);

但是,您傳入的任何載荷都不會生效(不會出現(xiàn)在最終收據(jù)中)。

不支持SubscriptionManager

Unity IAP提供了管理訂閱的SubscriptionManager類。由于此類的Unity標準IAP實現(xiàn)使用開發(fā)者載荷,因此不支持此類。您仍然可以創(chuàng)建此類,但是當您使用該類的任何getter方法時,您可能會收到不可靠的數(shù)據(jù)。

UpdateSubscription出現(xiàn)細微的API變更

Google Play結(jié)算服務(wù)插件不支持使用SubscriptionManager.UpdateSubscription()和SubscriptionManager.UpdateSubscriptionInGooglePlayStore()方法升級和降級您的訂閱。如果您的游戲調(diào)用了這些方法,系統(tǒng)會拋出GooglePlayStoreUnsupportedException。

結(jié)算庫提供了一個替代API來代替這些方法。如需升級或降級訂閱,請調(diào)用使用按比例計費模式的UpdateSubscription()方法:

void UpdateSubscription(Product oldProduct,Product newProduct,

GooglePlayStoreProrationMode prorationMode=GooglePlayStoreProrationMode.Unknown);

您可以用平臺檢查封裝此方法調(diào)用,也可以在捕獲GooglePlayStoreUnsupportedeException時將其封裝在catch塊中。

如需了解按比例計費模式的詳細使用方法和示例,請參閱設(shè)置按比例計費模式。

立即登錄,閱讀全文
版權(quán)說明:
本文內(nèi)容來自于Google Developers,本站不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。文章內(nèi)容系作者個人觀點,不代表快出海對觀點贊同或支持。如有侵權(quán),請聯(lián)系管理員(zzx@kchuhai.com)刪除!
優(yōu)質(zhì)服務(wù)商推薦
更多