uddjmh1985的专栏

因为工作需要,最近一直在研究Unibill这个插件,分享一个研究成果。

苹果内购流程就不详细述说了,如果有需要的童鞋可以去看看点击打开链接,里面讲的很详细,这里就不细说了。

物品的信息可能通过上图手动添加,也可动态添加,需要注意的是物品Id必顺和iTunes申请的一致,否则会导致购买失败

从Unibill接收数据

Unibill初使化完成调用(Unibiller.Initialise()),并有返回值

SUCCESS:初使化成功,,可以进行购买

SUCCESS_WITH_ERRORS:有一个或多个错误,不影响购物,可通过Unibiller去检索错误。

CRITICAL_ERROR: 初使化失败,会在XCode控制台输出错误信息。

如果初使化成功,就可以通过按钮进行购买,进行购买的函数是

需要传入的参数是物品的ID和开发都平台,ID是必填,开发者平台可不填,如何获得购买的物品ID,旧版本unibill会收到服务器发送的一个可购买列表,新版本把这个函数已经移除了,只能通过Unibiller.AllPurchasableItems获得本地物品列表(也可通过AllNonConsumablePurchasableItems获得非消耗物品列表,AllConsumablePurchasableItems可消耗物品列表),所以

这个上面物品的ID必顺和iTunes完全一致。

购买之后,会进入iTunes的购买界面,这个不用我们进行操作,iTunes会进行处理。

购买成功,返回一个物品列表,里面包含物品的各种信息。

取消购买。

购买失败,返回购买失败的物品列表,如果购买失败,最好检查 一下物品的ID。

Action<PurchasableItem> onPurchaseRefunded;退款,用户购买物品介绍和实际购买金额不符造成的损失

Action<bool> onTransactionsRestored;恢复购买,只有未消耗品才有此功能(用户把游戏卸载后,重新安装,恢复购买才应该有作用),返回为true时,恢复成功,false恢复失败,恢复购买函数Unibiller.restoreTransactions();

Unibiller.clearTransactions();消除本地采购记录

以上是不需要和自己服务器进行联通的情况,如果需要和服务器进入验证,需要在购买成功后向自己服务器进行一下校正,首先要把购买成功后的信息解析出来,

返回一个购买数据,需要从receipt中解析出“Status”,如果status==0说明购买成功,如果返回其他说明购买失败,具体返回数据是什么意思,大家可以百度一下

IEnumerator SuccessCheck(PurchaseEvent e ){#if SANDOBX_TESTlogstring += e.PurchasedItem.name.ToString();#endifDebug.Log("从服务器获得的Receipt"+e.Receipt);WWWForm Post = new WWWForm();string josnstring = string.Format("{{\&;receipt-data\&;:\&;{0}\&;}}",e.Receipt);Post.AddField("Receipt",josnstring);Debug.Log("服务器Jonstring"+josnstring);string str = ""网站地址"/VerifyReceipt_SandBox.aspx";WWW SendCheck = new WWW(str,Post);Debug.Log(str);yield return SendCheck;if(SendCheck == null|| SendCheck.error != null){Debug.Log("效验失败");#if SANDOBX_TESTlogstring += "效验错误:" + SendCheck.error + "\n";#endifif(BuyFailed != null){BuyFailed(e.PurchasedItem.Id,Unibiller.GetPurchaseCount(e.PurchasedItem),-1);}yield break;}Debug.Log("从服务器获得的ScndCheck"+SendCheck.text);Dictionary<string,object> SendCheckDir = (Dictionary<string, object>)Unibill.Impl.MiniJSON.jsonDecode(SendCheck.text);//SendCheck.text.dictionaryFromJson();//.dictionaryFromJsonDebug.Log(SendCheckDir["status"].ToString());if(SendCheckDir == null){Debug.Log("SendCheckDir "+SendCheckDir);}else if(SendCheckDir["status"].ToString().CompareTo("0") == 0){#if SANDOBX_TESTlogstring += "效验成功\n";#endif//TalkingDataManager.PaySuccess(ISuccess.transactionIdentifier);if(BuySuccess != null){BuySuccess(e.PurchasedItem.Id,Unibiller.GetPurchaseCount(e.PurchasedItem));}}else{#if SANDOBX_TESTlogstring += "效验失败\n";#endifif(BuyFailed != null){BuyFailed(e.PurchasedItem.Id,Unibiller.GetPurchaseCount(e.PurchasedItem),(int)SendCheckDir["status"]);}}}

任何业绩的质变都来自于量变的积累。

uddjmh1985的专栏

相关文章:

你感兴趣的文章:

标签云: