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

时间:2017-03-06 23:47:08

标签: ios xamarin.ios in-app-purchase

我正在使用适用于iOS的Xamarin.InAppPurchases插件。基本上,如果用户未登录iTunes,则对InAppPurchaseManager.RestorePreviousPurchases的调用不会触发登录提示。我查看了反汇编,发现它基本上运行了一些检查,然后调用内部恢复购买。我修改了我的代码。有没有人知道使用和不使用字符串名称标识符调用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的解决方法。它似乎适用于所有情况。

1 个答案:

答案 0 :(得分:0)

以下是解决此问题的解决方法。

//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帐户关联。您可以在Detecting Irregular Activity了解更多信息。