Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios ProcessPurchase事件多次调用-Unity IAP_Ios_Unity3d_In App Purchase - Fatal编程技术网

Ios ProcessPurchase事件多次调用-Unity IAP

Ios ProcessPurchase事件多次调用-Unity IAP,ios,unity3d,in-app-purchase,Ios,Unity3d,In App Purchase,在我购买每周订阅之前,现在每当我再次打开应用程序时,ProcessPurchase事件都会被多次调用。虽然这次我什么也没买 请参阅下面的xCode日志以了解更多间隙: 现在我刚刚打开了应用程序,所以没有理由让事件本身被多次调用。 按照我的想法,当你买东西的时候,它应该只接到一次电话。 之后就没有理由再回叫了 我主要遵循本文件及其代码: 以下是我的代码片段: public PurchaseProcessingResult ProcessPurchase(PurchaseEventArgs ar

在我购买每周订阅之前,现在每当我再次打开应用程序时,ProcessPurchase事件都会被多次调用。虽然这次我什么也没买

请参阅下面的xCode日志以了解更多间隙:

现在我刚刚打开了应用程序,所以没有理由让事件本身被多次调用。 按照我的想法,当你买东西的时候,它应该只接到一次电话。 之后就没有理由再回叫了

我主要遵循本文件及其代码:

以下是我的代码片段:

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支持部门回复了我-他们需要更新他们的插件。