歡迎進(jìn)入Unity內(nèi)購系列
你好! 這將是一個系列的文章
第一篇 介紹客戶端里支付的調(diào)起以及購買。
第二篇 介紹后臺對購買結(jié)果的驗證以及發(fā)貨(IOS)。
第三篇 介紹后臺對購買結(jié)果的驗證以及發(fā)貨(Android)。
第四篇 介紹后臺對內(nèi)購?fù)藛螁栴}的處理(IOS欺詐檢測以及欺詐信息反饋)。
整體流程介紹
我們是用的Unity客戶端+PHP后臺。
客戶端內(nèi)完成內(nèi)購 -> 內(nèi)購結(jié)果發(fā)送給PHP后臺 -> PHP后臺向IOS或Google后臺請求驗證訂單真實性 -> 驗證通過則進(jìn)行發(fā)貨 -> 正常情況到此就結(jié)束了
非正常情況:如果玩家后期在IOS或Google申請退款,如果退款成功,則IOS或Google會向我們提供的接口發(fā)送通知,這時我們需要對退款訂單進(jìn)行處理
第一篇(內(nèi)購接入)
本篇介紹unity里內(nèi)購插件IAP的接入,這一篇只包含客戶端內(nèi)支付的調(diào)起以及購買。
流程非常簡單,不需要開啟Unity Service等服務(wù),也不需要Google后臺服務(wù)公鑰,只需5分鐘即可完成接入,只需要按照我的流程,就一定能成功。
接入環(huán)境
本篇介紹unity里內(nèi)購插件IAP的接入,這一篇只包含客戶端內(nèi)支付的調(diào)起以及購買。
- unity版本: 2021.3.21f1;其中JDK、NDK、SDK使用unity自帶的。
- IAP版本: 4.10.0;
一、創(chuàng)建空工程
使用2021.3.21f1創(chuàng)建3D核心模板空工程
二、添加IAP插件
1、打開Package Manager,選擇Unity Register,找到In App Purchasing,點擊Install。
2、IAP導(dǎo)入完成之后會有一個彈窗讓我們Link Project,這里我們不用管,選Close就可以了。
不要選Link Project,因為那些是給單機(jī)游戲用的,需要客戶端內(nèi)自己驗證訂單的情況下要選Link Project,然后還要填入Google的公鑰以及其他設(shè)置。
三、寫代碼
1、創(chuàng)建UI,新建2個按鈕,一個掛載腳本的空物體。
2、新建腳本,代碼如下,將腳本拖到空物體上。
3、給按鈕點擊事件賦值。
using System;
using UnityEngine;
using UnityEngine.Purchasing;
using UnityEngine.Purchasing.Extension;
using UnityEngine.UI;
public class MyIAP : MonoBehaviour, IDetailedStoreListener
{
IStoreController m_StoreController; // The Unity Purchasing system.
void Start()
{
InitializePurchasing();
}
void InitializePurchasing()
{
var builder = ConfigurationBuilder.Instance(StandardPurchasingModule.Instance());
//Add products that will be purchasable and indicate its type.
//初始化產(chǎn)品列表,這里要跟IOS和Google后臺的產(chǎn)品列表一致
builder.AddProduct("acepro_diamond1", ProductType.Consumable);
builder.AddProduct("acepro_diamond2", ProductType.Consumable);
builder.AddProduct("acepro_diamond3", ProductType.Consumable);
builder.AddProduct("acepro_diamond4", ProductType.Consumable);
builder.AddProduct("acepro_diamond5", ProductType.Consumable);
builder.AddProduct("acepro_diamond6", ProductType.Consumable);
UnityPurchasing.Initialize(this, builder);
}
//測試用的,正式代碼可刪除
public void BuyDimaond1()
{
BuyProduct("acepro_diamond1");
}
//測試用的,正式代碼可刪除
public void BuyDimaond2()
{
BuyProduct("acepro_diamond2");
}
//購買時調(diào)用的接口,外部只需調(diào)用這一個接口即可
public void BuyProduct(string pruductid)
{
//開始購買
m_StoreController.InitiatePurchase(m_StoreController.products.WithID(pruductid));
}
public void OnInitialized(IStoreController controller, IExtensionProvider extensions)
{
//初始化成功
Debug.Log("In-App Purchasing successfully initialized");
m_StoreController = controller;
}
public void OnInitializeFailed(InitializationFailureReason error)
{
//初始化失敗
OnInitializeFailed(error, null);
}
public void OnInitializeFailed(InitializationFailureReason error, string message)
{
//初始化失敗
var errorMessage = $"Purchasing failed to initialize. Reason: {error}.";
if (message != null)
{
errorMessage += $" More details: {message}";
}
Debug.Log(errorMessage);
}
public PurchaseProcessingResult ProcessPurchase(PurchaseEventArgs args)
{
//Retrieve the purchased product
var product = args.purchasedProduct;
//Add the purchased product to the players inventory
//付款成功,通知服務(wù)器發(fā)貨
//此處需要自行添加邏輯,通知自己的服務(wù)器發(fā)貨,我這邊就省略了。
/*
***
***
***
*/
Debug.Log($"Purchase Complete - Product: {product.definition.id}");
//We return Complete, informing IAP that the processing on our side is done and the transaction can be closed.
return PurchaseProcessingResult.Complete;
}
public void OnPurchaseFailed(Product product, PurchaseFailureReason failureReason)
{
//付款失敗
Debug.Log($"Purchase failed - Product: '{product.definition.id}', PurchaseFailureReason: {failureReason}");
}
public void OnPurchaseFailed(Product product, PurchaseFailureDescription failureDescription)
{
//付款失敗
Debug.Log($"Purchase failed - Product: '{product.definition.id}'," +
$" Purchase failure reason: {failureDescription.reason}," +
$" Purchase failure details: {failureDescription.message}");
}
}
四、Google后臺配置
Google后臺配置。(暫時無圖,等有圖了再補(bǔ)上)
只需要添加應(yīng)用內(nèi)商品,并激活即可,不需要其他設(shè)置。
五、IOS后臺配置
IOS后臺配置。(暫時無圖,等有圖了再補(bǔ)上)
只需要添加應(yīng)用內(nèi)商品,并激活即可,不需要其他設(shè)置。
六、打包測試
Google測試前提條件:
1、手機(jī)開啟VPN,否則無法完成初始化而且無法調(diào)起內(nèi)購。
2、需要Google賬號添加可用的銀行卡。如果可以正常調(diào)起內(nèi)購,并且顯示了價格等信息,基本上是沒有問題的,客戶端內(nèi)購買的流程就算結(jié)束了。
打包設(shè)置里面需要注意的地方我已經(jīng)用紅框標(biāo)記了
1、版本號需要比自己google商店的最新版本一樣或者比google版本高,如果比google版本低,會提示當(dāng)前版本不支持google結(jié)算等提示,另外google后臺的商品也需要設(shè)置為激活狀態(tài),否則也會出現(xiàn)當(dāng)前版本不支持google結(jié)算等提示
2、keystore換成自己的,而且要跟google上的一致。如果加入了Google Play 簽名計劃,那么也是無法完成內(nèi)購的,需要提包到google測試軌道,如果沒有加入Google Play 簽名計劃,可以本地打包直接測試。
3、包名肯定是需要一致的。
總的來說就是要和自己google上的應(yīng)用,包名、簽名、版本一致就可以了。
七、Demo
其中的代碼可直接使用,APK可直接運行,第一個商品是有效的,第二個商品是無效的。文章來源:http://www.zghlxwxcb.cn/news/detail-849363.html
Demo地址如下:
Unity IAP完整Demo,內(nèi)含可運行APK文章來源地址http://www.zghlxwxcb.cn/news/detail-849363.html
到了這里,關(guān)于Unity接入IAP內(nèi)購(Android,IOS)最新流程,第一篇:內(nèi)購接入的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!