有谁知道如何检测用户是否取消了" In App"尝试安装另一个应用程序版本

时间:2012-11-12 14:15:07

标签: objective-c ios xcode deployment enterprise

我正在使用企业开发计划推出内部IOS应用程序。我正处于一个可以让用户触摸按钮的阶段,该按钮从应用程序内部下载并安装升级。

效果很好。但是,如果网络速度有点慢,IOS会向用户提示消息“你想安装吗,这样......等等”出现的时间有点晚。因此,在用户按下“安装”按钮后,我将其禁用。但是,如果用户在IOS提示时触摸“取消”,我不知道如何检测到这一点。

我在iPhone 3,4和5的几个设备上使用Xcode 4.5和IOS6.0。

在不提供整个链接的情况下,执行下载的代码如下所示。

- (void)actionSheet:(UIActionSheet *)modalView clickedButtonAtIndex:(NSInteger)buttonIndex {

if (buttonIndex == 0) {

    [self.IBOInstallActivityInd startAnimating];
    [self enableInstallButton:NO];
    self.tabBarController.tabBar.userInteractionEnabled = NO;
    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:APP_INSTALL_FROM]];

    }

} // actionSheet:clickedButtonAtIndex

而且,正如我所说,这很好 - 它有效。但如果用户触摸提示“取消”,我希望能够告诉。如您所见,我正在锁定用户界面。你可能会问为什么,如果一个应用程序即将关闭并接收升级。

嗯,根据网络速度,我想证明用户不止一次点击按钮。但是,如果用户取消,我希望能够重新启动用户界面,启用标签栏等......

我已经爬网了,一无所获!而且,我猜答案是Apple网站上的问题,就像它一样好。但是,这需要大量的阅读。

有没有人有任何想法?

1 个答案:

答案 0 :(得分:2)

我不知道如何捕获取消操作,但我可以告诉你我们如何处理这种情况。

我们编译的每个构建都有一个内置的特定修订版本,我们也将其嵌入到服务器上的plist文件中。我们的应用程序比较两个版本号以确定更新是否可用(版本不匹配,这也允许我们回滚)。

在您的情况下,您可以做的就是让VC每X秒验证一次服务器并刷新状态。如果他们进行升级,他们将从应用程序启动,如果他们没有,那么刷新将使按钮再次启用。

更简单的解决方案:仅在导航到VC时运行此查询。因此,如果他们取消他们将不得不退出VC并重新进入。

这是解析plist文件对我们来说的样子:

            NSString *localCopyPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
            localCopyPath = [localCopyPath stringByAppendingPathComponent:@"MDM_SERVER.plist"];
            NSFileManager *fileManager = [[NSFileManager alloc] init];

            BOOL created = [fileManager createFileAtPath:localCopyPath contents:plistData attributes:nil];                
            if (created) {
                NSDictionary *fullDict = [NSDictionary dictionaryWithContentsOfFile:localCopyPath];
                if (fullDict) {
                    NSArray *a = [fullDict objectForKey:@"items"];
                    NSDictionary *mdmDict = [a objectAtIndex:0];
                    NSDictionary *metaDict = [mdmDict objectForKey:@"metadata"];

                    // String of format "1.0.1779"
                    NSString *serverFullVersion = [metaDict objectForKey:@"bundle-version"];

                    // We will always compare on the last digit
                    NSUInteger lastPeriod = [serverFullVersion rangeOfString:@"." options:NSBackwardsSearch].location;
                    if (NSNotFound != lastPeriod && [serverFullVersion length] > lastPeriod) {
                        // update the time when we found an answer
                        mdmCheckedAt = [NSDate date];
                        NSString *serverSvnRevision = [serverFullVersion substringFromIndex:(lastPeriod + 1)];
                        // the big test - if our own svn version is different, then load the 
                        // URL to tell iOS to upgrade ourself
                        if (![kRevisionNumber isEqualToString:serverSvnRevision]) {
// Your Code HERE