京城游戏人-Day18: Unity 中如何进行 iOS 内购结果的验证?
-
- 作者:大锐哥
- 地址:http://blog.csdn.net/prevention
-
本文主要集中在如何进行验证购买结果,而不是如何实现购买流程。所以以下从你已经购买成功开始,拿到了购买结果的 receipt。
其次,本文解决的是如何在 Unity 中实现验证,而不是在 Objective-C 部分完成验证。
开始吧。
1. 封装为 JSON
我们的思路是把结果的 receipt 封装为 JSON 发给 Apple 进行验证。因为结构简单,就直接封装了。
string json = "{\"receipt-data\":\"" + receipt + "\"}";
再把string
转换为 Byte Array:
byte[] postBytes = System.Text.Encoding.UTF8.GetBytes (json);
创建一个 HTTP Request,其中 URL 有两种,一个是沙盒模式下的(Sandbox),一个是生产环境。两个 URL 分别是:
https://sandbox.itunes.apple.com/verifyReceipt
https://buy.itunes.apple.com/verifyReceipt
以沙盒模式为例,代码如下:
var req = System.Net.HttpWebRequest.Create ("https://sandbox.itunes.apple.com/verifyReceipt");
再设置请求为 POST 请求,内容为 JSON:
req.Method = "POST";
req.ContentType = "application/json";
req.ContentLength = postBytes.Length;
发起 HTTP Request:
using (var stream = req.GetRequestStream ()) {
stream.Write (postBytes, 0, postBytes.Length);
stream.Flush ();
}
得到 HTTP Response:
var sendResp = req.GetResponse ();
string sendRespText = "";
using (var streamReader = new System.IO.StreamReader (sendResp.GetResponseStream ())) {
sendRespText = streamReader.ReadToEnd ().Trim ();
}
这时可以把结果打印出来看看:
Debug.Log (sendRespText);
完工。以下放上完整代码,封装成了一个函数:
void VerifyReceipt(string msg) {
try {
string json = "{\"receipt-data\":\"" + msg + "\"}";
byte[] postBytes = System.Text.Encoding.UTF8.GetBytes (json);
var req = System.Net.HttpWebRequest.Create ("https://sandbox.itunes.apple.com/verifyReceipt");
req.Method = "POST";
req.ContentType = "application/json";
req.ContentLength = postBytes.Length;
using (var stream = req.GetRequestStream ()) {
stream.Write (postBytes, 0, postBytes.Length);
stream.Flush ();
}
var sendResp = req.GetResponse ();
string sendRespText = "";
using (var streamReader = new System.IO.StreamReader (sendResp.GetResponseStream ())) {
sendRespText = streamReader.ReadToEnd ().Trim ();
}
Debug.Log (sendRespText);
} catch (System.Exception ex) {
Debug.Log ("Exception: " + ex.Message.ToString());
}
}
-
- 作者:大锐哥
- 地址:http://blog.csdn.net/prevention
-