unity苹果支付使用的是unity-Services下的In-App Purchasing
因为需要与服务端验证订单,所以使用的代码方式。button添加内购内容方式没有测试几次,就不写了。
首先在苹果开发者中心注册app和内购信息。然后在unity中
unity 苹果支付坑点。与苹果验证Receipt不能用www通信
//初始化方法
public void InitUnityPurchase ()
{
var module = StandardPurchasingModule.Instance ();
var builder = ConfigurationBuilder.Instance (module);
//添加多个ID到builder里,ID命名方式建议字母+数字结尾,比如ShuiJing_1,ShuiJing_2,
//注意ProductType的类型,Consumable是可以无限购买(比如水晶),NonConsumable是只能购买一次(比如关卡),Subscription是每月订阅(比如VIP)
for (int i = 1; i <= 4; i++) {
builder.AddProduct ("com.shuoshuoshuo.englishtongue" + i.ToString (), ProductType.Subscription);
}
// builder.AddProduct ("com.shuoshuoshuo.englishtongue_1", ProductType.Consumable);
UnityPurchasing.Initialize (this, builder);
}
/// <summary>
/// 初始化回调成功
/// </summary>
/// <param name="controller">支付商店控制</param>
/// <param name="extensions"></param>
public void OnInitialized (IStoreController controller, IExtensionProvider extensions)
{
m_Controller = controller;
m_AppleExtensions = extensions.GetExtension<IAppleExtensions> ();
//登记购买延迟监听器
m_AppleExtensions.RegisterPurchaseDeferredListener (OnDeferred);
//初始化成功
InternetAvailable = true;
for (int i = 2; i <= 4; i++) {
//这里可以获取商品在苹果商店注册的信息
var product = m_Controller.products.WithID ("商店注册商品"+i.ToString());
//显示商品本地化价格
priceArr[i-2].text = product.metadata.localizedPrice.ToString ();
//显示商品名称
timeArr[i-2].text = product.metadata.localizedTitle.ToString ();
}
}
//初始化失败回调
public void OnInitializeFailed (InitializationFailureReason error)
{
InternetAvailable = false;
Debug.Log ("Billing failed to initialize!");
switch (error) {
case InitializationFailureReason.AppNotKnown:
Debug.LogError ("Is your App correctly uploaded on the relevant publisher console?");
break;
case InitializationFailureReason.PurchasingUnavailable:
// Ask the user if billing is disabled in device settings.
Debug.Log ("Billing disabled!");
break;
case InitializationFailureReason.NoProductsAvailable:
// Developer configuration error; check product metadata.
Debug.Log ("No products available for purchase!");
break;
}
}
// 开始购买
public void DoIapPurchase ()
{
if (m_Controller != null) {
var product = m_Controller.products.WithID ("注册商品名称");
if (product != null && product.availableToPurchase) {
//调起支付
m_Controller.InitiatePurchase (product);
}
}
}
/// <summary>
/// This will be called when a purchase completes.购买完成回调
/// </summary>
public PurchaseProcessingResult ProcessPurchase (PurchaseEventArgs e)
{
UnifiedReceipt Receipt = new UnifiedReceipt ();
Receipt = JsonUtility.FromJson<UnifiedReceipt> (e.purchasedProduct.receipt);
return PurchaseProcessingResult.Complete;
}
//购买失败回调
public void OnPurchaseFailed (Product item, PurchaseFailureReason r)
{
print ("手机没连WIFI 吗? : " + r.ToString ());
}
//购买延迟提示
private void OnDeferred (Product item)
{
print ("延迟");
}
//附带两种通信方法 不能用www通信
// JsonData json=new JsonData();
// json["receipt-data"]=data;
//// WebClient client = new WebClient ();
//// string res = client.UploadString ("https://sandbox.itunes.apple.com/verifyReceipt", json.ToJson ());
//// yield return res;
//// print (res);
//// client.Dispose ();
// Uri url = new Uri ("https://sandbox.itunes.apple.com/verifyReceipt");
// HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create (url);
// request.Method = "POST";
// request.ContentType="application/json";
// System.IO.Stream stream = request.GetRequestStream ();
// System.IO.StreamWriter myS = new System.IO.StreamWriter (stream);
// myS.Write (json.ToJson ());
// myS.Close ();
// HttpWebResponse resp = (HttpWebResponse)request.GetResponse ();
// yield return resp;
// stream = resp.GetResponseStream ();
// System.IO.StreamReader myStr = new System.IO.StreamReader (stream, Encoding.GetEncoding ("utf-8"));
// string rets = myStr.ReadToEnd ();
// print (rets);
//
// print (json.ToJson());
// WWWForm wwwf = new WWWForm ();
// wwwf.AddField ("receipt", json.ToJson());
// WWW www = new WWW ("https://sandbox.itunes.apple.com/verifyReceipt", wwwf);
// yield return www;
// if (www.error == null) {
// print ("------------------------------"+www.text+"---------------------------------");
// } else {
// print ("+++++++++++++++++++++++++++++++"+www.error+"+++++++++++++++++++++++++++++++++s");
// }