当我发起相同的UIView并且有可能购买InApp可购买产品时,我有两个地方。 1.用户入职结束 2.菜单中的标准位置
从第一个开始付款我通过SKPaymentTransactionStatePurchasing到达updatedTransactions:
- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions
{
DLog(@"updatedTransactions");
for (SKPaymentTransaction *transaction in transactions)
{
switch (transaction.transactionState)
{
case SKPaymentTransactionStatePurchased:
// I get here when the controller is initiated from menu, not from my user onboarding
break;
case SKPaymentTransactionStateFailed:
[self failedTransaction:transaction];
break;
case SKPaymentTransactionStateRestored:
[self restoreTransaction:transaction];
break;
case SKPaymentTransactionStatePurchasing:
// I get here
break;
default:
break;
}
}
}
但是当用户完成交易时,永远不会调用此方法。
当我从菜单启动相同的控制器时,一切正常。
有什么想法吗?
谢谢
答案 0 :(得分:2)
可能你在两个提到的控制器之一中设置了错误的事务观察者(或没有设置它)。
为了在事务更新时接收通知,您必须以这种方式添加观察者:
[[SKPaymentQueue defaultQueue] addTransactionObserver:something];
其中something
可以self
(如果您的paymentQueue:updatedTransactions:
方法在self
上)或其他对象。
如果您发布两个控制器的相关代码(控制器名称和上面提到的addTransactionObserver:
方法的调用加上一些上下文),我可以给你更多的信息,但在那之前我可以做一些假设。
假设您有两个控制器:
UserOnboardingController
UpgradeController
你说在UpgradeController
中它正常工作,这可能是因为当加载控制器时(例如在viewDidLoad:
中)有一个调用
[[SKPaymentQueue defaultQueue] addTransactionObserver:self];
而paymentQueue:updatedTransactions:
是UpgradeController
的方法之一。
但是,当您使用UserOnboardingController
时,您无法通过addTransactionObserver:
方法致电或传递错误的观察者。
如果是这种情况,你应该:
AppDelegate
或其他特定单例类上)