Ios ProcessPurchase事件多次调用-Unity IAP
在我购买每周订阅之前,现在每当我再次打开应用程序时,ProcessPurchase事件都会被多次调用。虽然这次我什么也没买 请参阅下面的xCode日志以了解更多间隙: 现在我刚刚打开了应用程序,所以没有理由让事件本身被多次调用。 按照我的想法,当你买东西的时候,它应该只接到一次电话。 之后就没有理由再回叫了 我主要遵循本文件及其代码: 以下是我的代码片段:Ios ProcessPurchase事件多次调用-Unity IAP,ios,unity3d,in-app-purchase,Ios,Unity3d,In App Purchase,在我购买每周订阅之前,现在每当我再次打开应用程序时,ProcessPurchase事件都会被多次调用。虽然这次我什么也没买 请参阅下面的xCode日志以了解更多间隙: 现在我刚刚打开了应用程序,所以没有理由让事件本身被多次调用。 按照我的想法,当你买东西的时候,它应该只接到一次电话。 之后就没有理由再回叫了 我主要遵循本文件及其代码: 以下是我的代码片段: public PurchaseProcessingResult ProcessPurchase(PurchaseEventArgs ar
public PurchaseProcessingResult ProcessPurchase(PurchaseEventArgs args)
{
if (String.Equals(args.purchasedProduct.definition.id, kProductIDPick_099, StringComparison.Ordinal))
{
Debug.Log(string.Format("ProcessPurchase: PASS. Product: '{0}'", args.purchasedProduct.definition.id));
}
else if (String.Equals(args.purchasedProduct.definition.id, kProductIDPick_199, StringComparison.Ordinal))
{
Debug.Log(string.Format("ProcessPurchase: PASS. Product: '{0}'", args.purchasedProduct.definition.id));
}
else if (String.Equals(args.purchasedProduct.definition.id, kProductIDPick_299, StringComparison.Ordinal))
{
Debug.Log(string.Format("ProcessPurchase: PASS. Product: '{0}'", args.purchasedProduct.definition.id));
}
else if (String.Equals(args.purchasedProduct.definition.id, kProductIDPick_399, StringComparison.Ordinal))
{
Debug.Log(string.Format("ProcessPurchase: PASS. Product: '{0}'", args.purchasedProduct.definition.id));
}
else if (String.Equals(args.purchasedProduct.definition.id, kProductIDPick_499, StringComparison.Ordinal))
{
Debug.Log(string.Format("ProcessPurchase: PASS. Product: '{0}'", args.purchasedProduct.definition.id));
}
else if (String.Equals(args.purchasedProduct.definition.id, kProductIDWeeklySubscription, StringComparison.Ordinal))
{
Debug.Log(string.Format("ProcessPurchase: PASS. Product: '{0}'", args.purchasedProduct.definition.id));
SubscriptionActivated();
//if (DataStorage.RetrieveLoggedInStatus() == GameConstants.ON)
// StartCoroutine(CheckForSubscriptionStatus());
}
else if (String.Equals(args.purchasedProduct.definition.id, kProductIDMonthlySubscription, StringComparison.Ordinal))
{
Debug.Log(string.Format("ProcessPurchase: PASS. Product: '{0}'", args.purchasedProduct.definition.id));
SubscriptionActivated();
//if (DataStorage.RetrieveLoggedInStatus() == GameConstants.ON)
// StartCoroutine(CheckForSubscriptionStatus());
}
else
{
Debug.Log(string.Format("ProcessPurchase: FAIL. Unrecognized product: '{0}'", args.purchasedProduct.definition.id));
}
return PurchaseProcessingResult.Complete;
}
private void SubscriptionActivated()
{
GameManager.Instance.IsSubscriptionRunning = true;
if (paidPickParser != null)
paidPickParser.UnlockAllPaidPicks();
Camera.main.SendMessage("ActivateSubscriptionDialog", false, SendMessageOptions.DontRequireReceiver);
}
在我购买每周订阅之前。
还有一点,为什么我要通过内部方法获取NullReferenceException?有关更多详细信息,请参阅上面的日志图像。您正在接收多个交易/购买事件,因为您正在使用自动续费订阅。在sandbox(苹果的购买测试环境)订阅期内帮助测试。谢谢您先生的快速回复:)因此在sandbox模式下发生了多次交易(每周-3分钟时间限制),所以所有这些都是在我打开应用程序时执行的,我的回答正确吗?NullReferenceException的原因是什么?是的,您的理解是正确的。不过我不知道NRE,祝你好运。但有一件事,我注意到了——现在每个应用程序发布的呼叫单打时间都不超过这个时间。那么,到底有多少次自动续订购买在后台被调用?在实际购买中,同样的事情也会发生,例如,一个月后,一个方法会因为4周而被调用4次。那么如何处理这种情况呢?Unity支持部门回复了我-他们需要更新他们的插件。