在iOS上使用Xamarin.InAppPurchases恢复购买
我正在使用iOS的Xamarin.InAppPurchases插件。基本上,如果用户未登录iTunes,则对InAppPurchaseManager.RestorePreviousPurchases的调用不会触发登录提示。我查看了反汇编,发现它基本上运行了一些检查,然后调用了内部恢复购买。我把代码修改成这个。有人知道使用或不使用字符串名称标识符调用RestoreCompletedTransactions的含义吗?这样调用时,会出现提示在iOS上使用Xamarin.InAppPurchases恢复购买,ios,xamarin.ios,in-app-purchase,Ios,Xamarin.ios,In App Purchase,我正在使用iOS的Xamarin.InAppPurchases插件。基本上,如果用户未登录iTunes,则对InAppPurchaseManager.RestorePreviousPurchases的调用不会触发登录提示。我查看了反汇编,发现它基本上运行了一些检查,然后调用了内部恢复购买。我把代码修改成这个。有人知道使用或不使用字符串名称标识符调用RestoreCompletedTransactions的含义吗?这样调用时,会出现提示 //Forced to call this in order
//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)在这里的最高评论似乎表明他也有同样的问题
编辑--我相信这是Xamarin中的一个bug。我在这里发布了这个bug:我加入了一个解决方案,其中包括调用收据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
}
}
至于我关于调用RestoreCompletedTransactions(带或不带applicationUsername)的含义的问题,这似乎会影响您可以存储在服务器上的事务中的一些信息。它允许您使用用户的本地用户名识别用户,因为在iTunes中,它只会将其与用户的iTunes帐户关联。你可以在这里学到更多