当我尝试在沙盒中测试我的应用内购买时,我不断收到来自 Apple 的 21002 'java.lang.NullPointerException' 错误。这就是我所做的:
- 在 iTunes Connect 中设置应用内购买产品。我可以通过 StoreKit 成功检索它们。
- 在 iTunes Connect 中设置测试用户。
- 应用程序启动,下载可用的应用内购买产品,我触发应用内购买,Apple 使用我在 iPhone 上进行 base64 编码并发送到我的 C#/ASP.NET 服务器的 transactionReceipt 进行响应。
- 服务器将接收到的字符串放入 JSON(我
NewtonSoft.Json
手动尝试过)并将 JSON 发送给 Apple:
var json = "{ 'receipt-data': '" + receipt + "'}";
或者:
var json = new JObject(new JProperty("receipt-data", receipt)).ToString();
进而:
var webRequest = System.Net.HttpWebRequest.Create("https://sandbox.itunes.apple.com/verifyReceipt");
webRequest.ContentType = "text/plain";
webRequest.Method = "POST";
byte[] byteArray = Encoding.UTF8.GetBytes(receipt);
webRequest.ContentLength = byteArray.Length;
using (var stream = webRequest.GetRequestStream())
{
stream.Write(byteArray, 0, byteArray.Length);
stream.Flush();
}
var resp = webRequest.GetResponse();
if (resp != null)
{
using (var sr = new System.IO.StreamReader(resp.GetResponseStream()))
{
var result = sr.ReadToEnd().Trim();
var iapResponse = Newtonsoft.Json.JsonConvert.DeserializeObject<AppleIapResponse>(result);
// always getting '21002' 'java.lang.NullPointerException'
}
}
我尝试了一切:更改 ContentType、JSON 格式、编码......
有什么提示吗?