京城游戏人-Day18: Unity 中如何进行 iOS 内购结果的验证?

京城游戏人-Day18: Unity 中如何进行 iOS 内购结果的验证?

-

-

本文主要集中在如何进行验证购买结果,而不是如何实现购买流程。所以以下从你已经购买成功开始,拿到了购买结果的 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());
    }
}

-

-

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值