Unity支付-IAP苹果篇

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");
        //      }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值