是否有可能迫使用户升级一次有我的应用程序提供一个新版本的iTunes商店?

我目前工作中的应用程序。然而,我要强制升级每当我上传一个新的版本,因为升级将有更多的功能,我想放弃以前的版本。这是可能默认使用iPhone或我写我自己的实现来检查当前的版本,并将其与实体店?

有帮助吗?

解决方案

只有这样,系统处理您的应用程序的更新,这促使用户该更新的标准AppStore的应用程序可用。结果 此外,独立的应用程序不知道可用的更新,所以你需要实现你的网络服务,应用程序可以检查当前的版本是有效的。结果 我不知道这是否符合与应用苹果的规则,像(找不到证据链接虽然)你不能上传试用版的应用程序。

<强> *编辑* 这个答案不再是真实的。看到其他upvoted答案为电流的道理。

其他提示

我已经越来越从iTunes web服务版本与当前版本比较..继完成这个功能是我的代码

        NSString *version = @"";
        NSURL *url = [NSURL URLWithString:@"http://itunes.apple.com/lookup?id=<Your app ID>"];
        versionRequest = [ASIFormDataRequest requestWithURL:url];
        [versionRequest setRequestMethod:@"GET"];
        [versionRequest setDelegate:self];
        [versionRequest setTimeOutSeconds:150];
        [versionRequest addRequestHeader:@"Content-Type" value:@"application/json"]; 
        [versionRequest startSynchronous];

        //Response string of our REST call
        NSString* jsonResponseString = [versionRequest responseString];

        NSDictionary *loginAuthenticationResponse = [jsonResponseString objectFromJSONString];

        NSArray *configData = [loginAuthenticationResponse valueForKey:@"results"];

        for (id config in configData) 
        {
            version = [config valueForKey:@"version"];
        }
   //Check your version with the version in app store
        if (![version isEqualToString:[itsUserDefaults objectForKey:@"version"]]) 
        {
            ProAlertView *createUserResponseAlert = [[ProAlertView alloc] initWithTitle:@"New Version!!" message: @"A new version of app is available to download" delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles: @"Download", nil];
        [createUserResponseAlert show]; 
        [createUserResponseAlert release];
        }

和把应用程序ID在iTunes链接请参见下面的代码..

- (void)alertView:(UIAlertView *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex {
    // the user clicked one of the OK/Cancel buttons
    if (buttonIndex == 1)
    {
        NSString *iTunesLink = @"itms-apps://phobos.apple.com/WebObjects/MZStore.woa/wa/viewSoftwareUpdate?id=<appid>&mt=8";
        [[UIApplication sharedApplication] openURL:[NSURL URLWithString:iTunesLink]];
    }
}

请注意:您需要JSONKit框架的工作和ASIHttp框架的工作,使web服务电话..

如果应用程序需要再更新采取一些自定义动作像提醒用户有更新可用,您可以检测到。这里是检测有可用的更新代码段。

-(BOOL) needsUpdate{
    NSDictionary* infoDictionary = [[NSBundle mainBundle] infoDictionary];
    NSString* appID = infoDictionary[@"CFBundleIdentifier"];
    NSURL* url = [NSURL URLWithString:[NSString stringWithFormat:@"http://itunes.apple.com/lookup?bundleId=%@", appID]];
    NSData* data = [NSData dataWithContentsOfURL:url];
    NSDictionary* lookup = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];

    if ([lookup[@"resultCount"] integerValue] == 1){
        NSString* appStoreVersion = lookup[@"results"][0][@"version"];
        NSString* currentVersion = infoDictionary[@"CFBundleShortVersionString"];
        if (![appStoreVersion isEqualToString:currentVersion]){
            NSLog(@"Need to update [%@ != %@]", appStoreVersion, currentVersion);
            return YES;
        }
    }
    return NO;
}

如果你绝对必须的,你可以启动应用程序商店,以便用户可以从那里获得最新版本。我建议使这个可选的,或至少第一呈现对话。

// iTunesLink should be your applications link
NSString *iTunesLink = @"http://phobos.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=284417350&mt=8";


[[UIApplication sharedApplication] openURL:[NSURL URLWithString:iTunesLink]];

这个问题最初发布7年前,虽然一些问题的答案仍然适用,这里是一个更先进的最新方法。

我建议 https://github.com/ArtSabintsev/Siren 是夫特3兼容并能安装用的CocoaPods或迦太基。

的CocoaPods,夫特3支持:

pod 'Siren'

迦太基:

github "ArtSabintsev/Siren"

一个用于强制升级系统是每一个具有上的东西外该应用程序的Dependance的应用程序的一部分。苹果和谷歌宣称,如果一个应用程序使用外在的东西,然后外部API应该永远活着,永远不会改变,等等等等,但是这根本不现实。如果是这样的话,如果应用程序依赖的服务可以改变那么必须是为应用程序来检查,看看它是否应该限制功能,并提示用户来获得最新版本的方法或事物将简单地神秘地失败。

这可能和应该是苹果和谷歌提供,但他们没有这样的几场比赛之外的每一个应用程序需要建立这个,所以...

我已经开始了一个基于铁轨开源(Apache 2.0中)项目创建一个解决这个问题。这就是所谓的应用 - [Ctrl]键,这是非常进展中的工作,但欢迎您使用它,我欢迎任何形式的捐助。如果我能得到这个起来,在我的业余时间运行,我会提供这一切应用开发者提供免费服务,当然每家公司的一些非常合理的水平将始终能够旋转起来它自己的部署。

它在这里在GitHub: https://github.com/SlalomDigital/ApplicationCtrl

贡献,并帮助我解决这个问题为好!

有没有自动化的方式来做到这一点,你必须手动写一些东西。

您的业务/设计方案不应该包含短语“强制用户”。当你让他们做一些事情的人生气。试想一下,谁是你的可爱的小应用程序的一个早上只打开发现你强迫他进行升级之前,他可以使用该应用程序为他所需要的匆忙用户。想象一下,他伸出在不必使用边下载荒野。他会不高兴。

如果你按照这个计划够长,你升级的一个必然引入一个明显的错误。如果强制用户使用越野车版本,他们就会造反。

我已经习惯于通过经验畏缩,每当我看到用来描述软件的新版本,因为这必然意味着功能膨胀“更多功能”。设计师倾向于保持嫁接更多的功能到应用程序,直到一个应用程序做的一切。这就好比在那里做一个应用程序做的很多事情在iPhone平台上尤其危险迅速压倒了界面和应用程序的响应能力。

Edit01:我在这里评论如何付费用户之后升级也可能是有关你的计划更新应用程序。如果您的升级设计,削减了苹果公司的收入循环,它是一个非首发的。

<强>更新

只是基于下面留言澄清:是的,有时你必须要求用户进行升级。然而,也就是从 设计应用程序的从一开始的 以强制用户每一次升级的开发者很大的不同发布一个新的版本。

这种设计的目的是使开发者的生活容易,而不是用户的。每次用户必须花费的时间效益提升他们没有要求,也许不想要的,你所用的时间和资源,从客户。该卸载的时间和精力从开发到用户设计不好的设计,因为人们最终购买软件,为自己的利益。当你减少以为利,你降低了软件的最终盈利能力。

所以,没有设计师应该设计出强制用户做一些用户不希望,除非它是绝对必要的技术软件。这当然是一个经验法则,但它是一个非常好的一个。

我的应用程序更新到App Store刚刚否决的正是这个原因。我们增加了一个功能检查对当前版本的安装的版本,如果它不支持的版本,我们迫使他们更新。

苹果拒绝此。

于是回到设计板!

其他的答案指示一个具有实现强制更新的功能自身。 这是一个耻辱真的,我想这是不是这样。 我的第一个更新到iOS应用程序是明天被释放,幸运 它不会是问题,因为我们只修改了应用。 然而,当我们最终将改变我们的web服务的结构,这将是非常有用的 能够强制更新,使我们的服务器没有支持每个应用程序的版本。

有是强制然而更新,这似乎在这个线程被未提及的一种替代方法。 你可以有每个Web服务调用产生的数据连接架构的数据, 它告诉应用程序如何将数据应该在您的应用deserialised。 这使您可以通过更改获得,请求产生的数据结构,而不在应用程序打破deserialisation。 当然,这个假设是你写的解释,本身不会改变,但是这是一个有点合理的假设,使当它已经成熟了。

发布请求可以是“架构的田间”通过相互作用。 有了这个,我的意思是,你尽一切后请求之前,你问如何调用最新的Web服务说明。 您处理使用该附加架构的指令,然后您对web服务的实际调用。 实质上,这意味着每一个岗位请求需要2个请求,但可以是好的。

不过,不管你执行强制更新或模式解释功能已存在于从第1天的应用程序,当它击中的应用程序商店。 否则,你是在同一个烂摊子。如果苹果实现的强制更新为我们开发所有这些复杂的将是不必要的。 模式的解释仍然是一个可用性的改善,如果强制更新,虽然存在。 但它的错误我一点点,苹果不迫使更新,因为至少有了它,人们可以介绍自己反破更新措施的应用发布之后。

您好为将来的人,我发现这个教程应该帮助任何人,也帮助了我。

HTTP:/ /codewithchris.com/tutorial-how-to-implement-in-app-update-functionality-in-your-iphoneipad-app/

编辑(你的代码将类似于什么是下面的东西):

// Try to get version 
NSString *versionNumber = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"];

NSURL *updateUrl = [NSURL URLWithString:@"http://yourdomain.com/yourupdatefile.xml"];
NSURLRequest *urlRequest = [NSURLRequest requestWithURL:updateUrl
                                            cachePolicy:NSURLCacheStorageNotAllowed
                                        timeoutInterval:20.0];
NSURLResponse *response = nil;
NSError *error = nil;
NSData *data = [NSURLConnection sendSynchronousRequest:urlRequest
                                     returningResponse:&response
                                                 error:&error];
// Check no error, then parse data
if (error == nil)
{
    // Parse response into a dictionary
    NSPropertyListFormat format;
    NSString *errorStr = nil;
    NSDictionary *dictionary = [NSPropertyListSerialization propertyListFromData:data
                                                                mutabilityOption:NSPropertyListImmutable
                                                                          format:&format
                                                                errorDescription:&errorStr];        
    if (errorStr == nil)
    {
        @try {

            // Try to see if the current app version exists in the update xml
            NSString *itunesUrl = [dictionary objectForKey:versionNumber];

            if (itunesUrl)
            {
                // Show dialog to ask user to update!
            }
            else {
                // Version not in XML
            }
        } @catch (NSException *e) {
            // Error with retrieving the key
        }
    }
    else {
        // Error with parsing data into dictionary
    }
}

然而,在进一步的研究中,我发现这是因为如果你不使用的服务器的理想解决方案。

-(BOOL) needsUpdate{
    NSDictionary* infoDictionary = [[NSBundle mainBundle] infoDictionary];
    NSString* appID = infoDictionary[@"CFBundleIdentifier"];
    NSURL* url = [NSURL URLWithString:[NSString stringWithFormat:@"http://itunes.apple.com/lookup?bundleId=%@", appID]];
    NSData* data = [NSData dataWithContentsOfURL:url];
    NSDictionary* lookup = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];

    if ([lookup[@"resultCount"] integerValue] == 1){
        NSString* appStoreVersion = lookup[@"results"][0][@"version"];
        NSString* currentVersion = infoDictionary[@"CFBundleShortVersionString"];
        if (![appStoreVersion isEqualToString:currentVersion]){
            NSLog(@"Need to update [%@ != %@]", appStoreVersion, currentVersion);
            return YES;
        }
    }
    return NO;
}

在:

if (![appStoreVersion isEqualToString:currentVersion]){
                NSLog(@"Need to update [%@ != %@]", appStoreVersion, currentVersion);
                return YES;
            }

你设置你想要做的,如果它不等于什么代码的一部分,这是你向用户发送到应用程序商店下载最新的版本。

您可以使用以下网址获得任何应用程序的信息 你只知道你的应用程序中的Apple ID。

您可以在itunesconnect.com得到这个苹果ID>您的应用程序>应用信息页

GET: http://itunes.apple.com/lookup?id=

当然也没有办法。用户应该作出决定,如果他想下载你的应用程序或没有的新版本。

在AppStore上会显示是否有arenew版本,所以我也并不认为苹果会允许这样。此外,我不知道你会怎么做呢?你可以通过互联网连接检查,但这不是苹果喜欢的方式,所以你不会有机会做到这一点。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top