Unity IAP 谷歌支付,ios支付——最白话,手把手教你做系列。
2017-12-23 16:37
3247 查看
Unity IAP支付接入——谷歌支付,IOS支付。
申请商品ID不再赘述。
两个部分
一,接入SDK
打开unity选择Window——Services出现Services窗口
打开In-App-Purchasing。
跳转到下个页面。选择Import,开始下载安装SDK
安装完成出现以下目录。
第一步结束。
第二步。
代码部分
代码可以挂在你的商品页面上。确保在调用购买方法之前初始化即可。ios,只用修改对应商品ID即可。
申请商品ID不再赘述。
两个部分
一,接入SDK
打开unity选择Window——Services出现Services窗口
打开In-App-Purchasing。
跳转到下个页面。选择Import,开始下载安装SDK
安装完成出现以下目录。
第一步结束。
第二步。
代码部分
using System; using System.Collections.Generic; using UnityEngine; using UnityEngine.Purchasing; // Placing the Purchaser class in the CompleteProject namespace allows it to interact with ScoreManager, // one of the existing Survival Shooter scripts. // Deriving the Purchaser class from IStoreListener enables it to receive messages from Unity Purchasing. //脚本需在调用购买方法之前初始化 public class Purchaser : MonoBehaviour, IStoreListener { //定义商品 private const string product_1 = "商品ID1"; private const string product_2 = "商品ID2"; private const string product_3 = "商品ID3"; private static IStoreController m_StoreController; // The Unity Purchasing system. private static IExtensionProvider m_StoreExtensionProvider; // The store-specific Purchasing subsystems. public static string kProductIDConsumable = "consumable"; public static string kProductIDNonConsumable = "nonconsumable"; public static string kProductIDSubscription = "subscription"; // Apple App Store-specific product identifier for the subscription product. private static string kProductNameAppleSubscription = "com.unity3d.subscription.new"; // Google Play Store-specific product identifier subscription product. private < cd40 span class="hljs-keyword">static string kProductNameGooglePlaySubscription = "com.unity3d.subscription.original"; void Start() { // If we haven't set up the Unity Purchasing reference if (m_StoreController == null) { // Begin to configure our connection to Purchasing InitializePurchasing(); } } public void InitializePurchasing() { // If we have already connected to Purchasing ... if (IsInitialized()) { // ... we are done here. return; } // Create a builder, first passing in a suite of Unity provided stores. var builder = ConfigurationBuilder.Instance(StandardPurchasingModule.Instance()); //添加商品ID和类型 对应定义的商品ID builder.AddProduct(product_1, ProductType.Consumable, new IDs { {"商品ID1", GooglePlay.Name } }); builder.AddProduct(product_2, ProductType.Consumable, new IDs { {"商品ID1", GooglePlay.Name } }); builder.AddProduct(product_3, ProductType.Consumable, new IDs { {"商品ID1", GooglePlay.Name } }); // Kick off the remainder of the set-up with an asynchrounous call, passing the configuration // and this class' instance. Expect a response either in OnInitialized or OnInitializeFailed. UnityPurchasing.Initialize(this, builder); } private bool IsInitialized() { // Only say we are initialized if both the Purchasing references are set. return m_StoreController != null && m_StoreExtensionProvider != null; } public void BuyConsumable() { // Buy the consumable product using its general identifier. Expect a response either // through ProcessPurchase or OnPurchaseFailed asynchronously. BuyProductID(kProductIDConsumable); } public void BuyNonConsumable() { // Buy the non-consumable product using its general identifier. Expect a response either // through ProcessPurchase or OnPurchaseFailed asynchronously. BuyProductID(kProductIDNonConsumable); } public void BuySubscription() { // Buy the subscription product using its the general identifier. Expect a response either // through ProcessPurchase or OnPurchaseFailed asynchronously. // Notice how we use the general product identifier in spite of this ID being mapped to // custom store-specific identifiers above. BuyProductID(kProductIDSubscription); } //购买商品调用的方法 public void BuyProductID(string productId) { // If Purchasing has been initialized ... if (IsInitialized()) { // ... look up the Product reference with the general product identifier and the Purchasing // system's products collection. Product product = m_StoreController.products.WithID(productId); // If the look up found a product for this device's store and that product is ready to be sold ... if (product != null && product.availableToPurchase) { Debug.Log(string.Format("Purchasing product asychronously: '{0}'", product.definition.id)); // ... buy the product. Expect a response either through ProcessPurchase or OnPurchaseFailed // asynchronously. m_StoreController.InitiatePurchase(product); } // Otherwise ... else { // ... report the product look-up failure situation Debug.Log("BuyProductID: FAIL. Not purchasing product, either is not found or is not available for purchase"); } } // Otherwise ... else { // ... report the fact Purchasing has not succeeded initializing yet. Consider waiting longer or // retrying initiailization. Debug.Log("BuyProductID FAIL. Not initialized."); } } // Restore purchases previously made by this customer. Some platforms automatically restore purchases, like Google. // Apple currently requires explicit purchase restoration for IAP, conditionally displaying a password prompt. public void RestorePurchases() { // If Purchasing has not yet been set up ... if (!IsInitialized()) { // ... report the situation and stop restoring. Consider either waiting longer, or retrying initialization. Debug.Log("RestorePurchases FAIL. Not initialized."); return; } // If we are running on an Apple device ... if (Application.platform == RuntimePlatform.IPhonePlayer || Application.platform == RuntimePlatform.OSXPlayer) { // ... begin restoring purchases Debug.Log("RestorePurchases started ..."); // Fetch the Apple store-specific subsystem. var apple = m_StoreExtensionProvider.GetExtension<IAppleExtensions>(); // Begin the asynchronous process of restoring purchases. Expect a confirmation response in // the Action<bool> below, and ProcessPurchase if there are previously purchased products to restore. apple.RestoreTransactions((result) => { // The first phase of restoration. If no more responses are received on ProcessPurchase then // no purchases are available to be restored. Debug.Log("RestorePurchases continuing: " + result + ". If no further messages, no purchases available to restore."); }); } // Otherwise ... else { // We are not running on an Apple device. No work is necessary to restore purchases. Debug.Log("RestorePurchases FAIL. Not supported on this platform. Current = " + Application.platform); } } // // --- IStoreListener // public void OnInitialized(IStoreController controller, IExtensionProvider extensions) { // Purchasing has succeeded initializing. Collect our Purchasing references. Debug.Log("OnInitialized: PASS"); // Overall Purchasing system, configured with products for this application. m_StoreController = controller; // Store specific subsystem, for accessing device-specific store features. m_StoreExtensionProvider = extensions; } public void OnInitializeFailed(InitializationFailureReason error) { // Purchasing set-up has not succeeded. Check error for reason. Consider sharing this reason with the user. Debug.Log("OnInitializeFailed InitializationFailureReason:" + error); } //购买不同商品结束后的处理方法 对应定义的商品 public PurchaseProcessingResult ProcessPurchase(PurchaseEventArgs args) { // A consumable product has been purchased by this user. if (String.Equals(args.purchasedProduct.definition.id, product_1, StringComparison.Ordinal)) { //商品1购买成功逻辑 } else if (String.Equals(args.purchasedProduct.definition.id, product_2, StringComparison.Ordinal)) { //商品2购买成功逻辑 } else if (String.Equals(args.purchasedProduct.definition.id, product_3, StringComparison.Ordinal)) { //商品3购买成功逻辑 } else { Debug.Log(string.Format("ProcessPurchase: FAIL. Unrecognized product: '{0}'", args.purchasedProduct.definition.id)); } // Return a flag indicating whether this product has completely been received, or if the application needs // to be reminded of this purchase at next app launch. Use PurchaseProcessingResult.Pending when still // saving purchased products to the cloud, and when that save is delayed. return PurchaseProcessingResult.Complete; } public void OnPurchaseFailed(Product product, PurchaseFailureReason failureReason) { // A product purchase attempt did not succeed. Check failureReason for more detail. Consider sharing // this reason with the user to guide their troubleshooting actions. Debug.Log(string.Format("OnPurchaseFailed: FAIL. Product: '{0}', PurchaseFailureReason: {1}", product.definition.storeSpecificId, failureReason)); } }
代码可以挂在你的商品页面上。确保在调用购买方法之前初始化即可。ios,只用修改对应商品ID即可。
相关文章推荐
- Unity内IAP支付二次验证/服务器验证————最白话,手把手教你做系列。
- 谷歌AdMob广告接入2——最白话,手把手教你做系列。
- 谷歌AdMob广告接入——最白话,手把手教你做系列。
- 谷歌排行榜接入————最白话,手把手教你做系列。
- iOS应用内支付(IAP)的注意事项
- iOS应用内支付(IAP)的那些坑
- iOS内购(IAP,In App Purchases-在APP内部支付),设置及使用
- unity基础之C#基础——[转]大白话系列之C#委托与事件讲解(一)
- 苹果不允许 iOS 应用内置购买(IAP)使用第三方支付方式,那么跨平台的支付怎么解决这个问题?
- IOS IAP APP内支付 Java服务端代码
- iOS应用内支付(IAP)开发中后期的那些坑
- 小胖说事17--------iOS应用内支付(IAP)的那些坑建测试账号流程!
- iOS内支付总结__详解iOS应用程序内使用IAP/StoreKit付费、沙盒(SandBox)测试、创建测试账号流程!【2012-12-11日更新获取"产品付费数量等于0的问题"】
- iOS应用内支付(IAP)的那些坑
- iOS应用内支付(IAP)的那些坑
- iOS应用内支付(IAP,In-App Purchase)的那些坑
- iOS应用内支付(IAP)详解
- Vungle激励广告接入——最白话,手把手教你做系列。
- IOS苹果内支付iap Java服务端
- IOS IAP支付总结