当我的一个应用内交易完成后,无论是因为还原还是成功购买,Store Kit都会生成一个显示确认对话框的提醒视图。在当前版本中,它表示“谢谢。您的购买成功了。”。
由于我的应用程序应在购买成功后移动到其他屏幕,因此我想拦截该对话框,并且在用户解除之前不进行转换。问题是我似乎无法控制该对话框。任何人都有任何关于如何做的想法?
谢谢!
答案 0 :(得分:4)
不要试试。购买过程中会通知您的付款代表 - 使用该机制。这些警报是AppStore.app二进制文件的一部分,不会在您的过程中执行,因此您无法触及它们。
答案 1 :(得分:2)
当弹出这些StoreKit警报时,您可以使用应用程序变为非活动状态:
购买完成后检查UIApplication的activeState属性是否为“非活动”,然后将移动延迟到另一个屏幕,直到状态再次变为“活动”(监视UIApplicationDidBecomeActive通知)。
早于4.0的固件不支持'activeState'属性,但您仍可以手动跟踪应用状态更改并随时了解其状态。
答案 2 :(得分:2)
我已经用iOS6,iOS7和iOS8对这项技术进行了测试,一切都很好。
- (void) activeShow;
{
UIApplication *app = [UIApplication sharedApplication];
if (app.applicationState == UIApplicationStateActive) {
[self finishActiveShow];
} else {
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(becomeActiveNotification:)
name:UIApplicationDidBecomeActiveNotification object:nil];
}
}
- (void) finishActiveShow;
{
if (self.beforeShow) {
self.beforeShow();
}
[self.alert show];
if (self.afterShow) {
self.afterShow();
}
}
- (void) becomeActiveNotification:(id) sender;
{
SPASLog(@"UIApplicationDidBecomeActiveNotification: %@", sender);
// From https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/Notifications/Articles/NotificationCenters.html
// "In a multithreaded application, notifications are always delivered in the thread in which the notification was posted, which may not be the same thread in which an observer registered itself."
// So, it seems that we may not get the notification on the main thread.
dispatch_async(dispatch_get_main_queue(), ^{
[self finishActiveShow];
});
[[NSNotificationCenter defaultCenter] removeObserver:self name:UIApplicationDidBecomeActiveNotification object:nil];
}