Dav*_*vid 5 objective-c in-app-purchase ios
我有两个地方,当我发起相同的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;
}
}
}
Run Code Online (Sandbox Code Playgroud)
但是,当用户完成事务时,永远不会调用此方法.
当我从菜单启动相同的控制器时,一切正常.
有任何想法吗?
谢谢
您可能在上述两个控制器之一中设置了错误的事务观察器(或未设置)。
为了在事务更新时接收通知,您必须通过以下方式添加观察者:
[[SKPaymentQueue defaultQueue] addTransactionObserver:something];
Run Code Online (Sandbox Code Playgroud)
其中something
可以是self
(如果你的paymentQueue:updatedTransactions:
方法是 on self
)或另一个对象。
如果您发布两个控制器的相关代码(控制器名称和对addTransactionObserver:
上述方法的调用以及一些上下文),我可以为您提供更多信息,但在那之前我可以做出一些假设。
假设您有两个控制器:
UserOnboardingController
UpgradeController
你说它UpgradeController
工作正常,这可能是因为当加载控制器时(例如viewDidLoad:
)有一个调用
[[SKPaymentQueue defaultQueue] addTransactionObserver:self];
Run Code Online (Sandbox Code Playgroud)
是paymentQueue:updatedTransactions:
的方法之一UpgradeController
。
但是,当您处于 on 状态时UserOnboardingController
,您不会调用错误的观察者或将错误的观察者传递给addTransactionObserver:
方法。
如果是这种情况,您应该:
AppDelegate
或另一个特定的单例类上) 归档时间: |
|
查看次数: |
413 次 |
最近记录: |