拦截Store Kit警报视图

时间:2010-12-02 02:14:24

标签: iphone storekit

当我的一个应用内交易完成后,无论是因为还原还是成功购买,Store Kit都会生成一个显示确认对话框的提醒视图。在当前版本中,它表示“谢谢。您的购买成功了。”。

由于我的应用程序应在购买成功后移动到其他屏幕,因此我想拦截该对话框,并且在用户解除之前不进行转换。问题是我似乎无法控制该对话框。任何人都有任何关于如何做的想法?

谢谢!

3 个答案:

答案 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];
}