繁体   English   中英

在iOS上使用Xamarin.InAppPurchases恢复购买

[英]Restore Purchases with Xamarin.InAppPurchases on iOS

我正在使用iOS的Xamarin.InAppPurchases插件。 基本上,如果用户未登录iTunes,则对InAppPurchaseManager.RestorePreviousPurchases的调用不会触发登录提示。 我查看了反汇编,发现它基本上在运行一些检查,然后调用内部的Restore Purchase。 我对此进行了修改。 有谁知道使用和不使用字符串名称标识符调用RestoreCompletedTransactions的含义? 当这样调用时,提示出现。

//Forced to call this in order to trigger login
SKPaymentQueue.DefaultQueue.RestoreCompletedTransactions();

//Redundant, but I don't know the implications of removing it 
inAppPurchaseManager.RestorePreviousPurchases();            

汤姆·格兰维尔(Tom Glanville)在这里的最高评价似乎表明他遇到了同样的问题。 https://components.xamarin.com/view/xamarin.inapppurchase

编辑-我相信这是Xamarin中的错误。 我将错误发布在这里: Bugzilla 53100我提出了一种解决方法,其中涉及调用收据API。 它似乎在所有情况下都有效。

这是我为了解决该错误而采用的解决方法。

//Forced to call this in order to trigger login
//Get a receipt
var receiptRequest = new SKReceiptRefreshRequest();
receiptRequest.Init();
receiptRequest.Delegate = new ReceiptRequestDelegate(inAppManager);
receiptRequest.Start();

//Use this to trigger login
public class ReceiptRequestDelegate : SKRequestDelegate
{
    private InAppPurchaseManager inAppManager;

    public ReceiptRequestDelegate(InAppPurchaseManager iapm)
    {
        inAppManager = iapm;
    }

    public override void RequestFinished(SKRequest request)
    {
        //Now call restore purchases
        inAppManager.RestorePreviousPurchases();
    }

    public override void RequestFailed(SKRequest request, NSError error)
    {
        //Handle request failed
    }
}

关于我的问题,无论是否使用applicationUsername调用RestoreCompletedTransactions的含义,似乎都会影响可以存储在服务器上的事务中的某些信息。 它使您可以使用本地用户名来识别用户,因为在iTunes中,它将仅将其与他们的iTunes帐户关联。 您可以在此处了解更多信息,以检测不规则活动

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM