我正在使用适用于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的解决方法。它似乎适用于所有情况。答案 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了解更多信息。