当前位置:  开发笔记 > 编程语言 > 正文

我可以强制iPhone用户升级应用程序吗?

如何解决《我可以强制iPhone用户升级应用程序吗?》经验,为你挑选了9个好方法。

一旦iTunes Store中有我的应用程序的新版本,是否可以强制用户升级?

我目前正在申请一个申请.但是,我想在上传新版本时强制升级,因为升级会有更多功能,我想放弃以前的版本.这是默认使用iPhone的可能吗?还是我必须编写自己的实现来检查当前版本并将其与商店进行比较?



1> Dilip Rajkum..:

我通过从itunes webservice获取版本并与当前版本进行比较来完成此功能.以下是我的代码

        NSString *version = @"";
        NSURL *url = [NSURL URLWithString:@"http://itunes.apple.com/lookup?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=&mt=8";
        [[UIApplication sharedApplication] openURL:[NSURL URLWithString:iTunesLink]];
    }
}

注意:您需要JSONKit框架工作和ASIHttp框架工作来进行Web服务调用.



2> datinc..:

您可以检测应用程序是否需要更新,然后执行一些自定义操作,例如提醒用户更新可用.以下是检测到更新可用的代码段.

-(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;
}


BundleIdentifier可能会针对每个下一个版本进行更改.最好使用"App ID",因为它不会改变.

3> BadPirate..:

如果您必须这样做,您可以启动App Store,以便您的用户可以从那里获得最新版本.我建议先选择这个,或至少提出一个对话.

// 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]];



4> Juan Carlos ..:

这个问题最初是在7年前发布的,虽然有些答案仍然相关,但这是一个更新的方法.

我推荐https://github.com/ArtSabintsev/Siren兼容Swift 3,可与Cocoapods或Carthage一起安装.

CocoaPods,Swift 3支持:

pod 'Siren'

迦太基:

github "ArtSabintsev/Siren"



5> Vladimir..:

系统处理应用程序更新的唯一方法是提示用户该更新在标准AppStore应用程序中可用。
另外,独立应用程序不知道可用的更新,因此您需要实现Web服务,应用程序可以在其中检查当前版本是否有效。
而且我不确定这是否符合Apple关于应用程序的规则,例如(虽然找不到证明链接)您不能上载应用程序的试用版。

*编辑* 此答案不再正确。有关当前的真相,请参见其他获批的答案。


@HariKaramSingh,是的,您可以使用其他问题中提到的方法。不幸的是,当我将此答案标记为已接受时,我无法删除它

6> Aaron Cooley..:

用于强制升级的系统应该是每个应用程序的一部分,这些应用程序依赖于该应用程序外部的某些内容.苹果和谷歌都声称,如果一个应用程序使用外部的东西,那么外部API应该永远存在,永远不会改变,等等,但这是不切实际的.如果是这种情况,如果应用程序所依赖的服务可能会发生变化,那么必须有一种方法让应用程序检查并查看它是否应该限制功能并提示用户获取最新版本,否则事情就会神秘地失败.

这可能也应该是苹果和谷歌提供的东西,但他们并不是这样,除了几个游戏之外的每个应用程序都需要构建这个,所以......

我已经开始了一个基于rails的开源(Apache 2.0)项目来创建这个问题的解决方案.它被称为Application- [Ctrl],它正在进行中,但欢迎您使用它,我欢迎任何形式的贡献.如果我可以在业余时间启动并运行,我会向所有应用程序开发人员提供一些非常合理的免费服务,当然每家公司都能够自行部署它.

它在GitHub上:https://github.com/SlalomDigital/ApplicationCtrl

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



7> kubi..:

没有自动的方法,您必须手动编写一些内容。



8> TechZen..:

您的业​​务/设计计划中绝不能包含“强迫用户”一词。人们让你做某事时会生气。想象一下一个有急的用户一天早晨打开您漂亮的小应用程序,却发现您在强迫他升级之前,他才可以使用该应用程序满足他的需求。想象一下,他不得不使用Edge下载而无所适从。他不会幸福的。

如果您遵守此计划的时间足够长,那么其中一项升级将不可避免地引入一个明显的错误。如果您强迫用户使用越野车版本,他们会反叛。

每当我看到用来描述软件新版本的“更多功能”时,我都会受经验的束缚,因为这不可避免地意味着功能膨胀。设计师倾向于将越来越多的功能嫁接到应用程序上,直到一个应用程序完成所有工作为止。在像iPhone这样的平台上,这特别危险,在该平台上,使一个应用程序执行很多事情会迅速淹没该应用程序的界面和响应能力。

Edit01:我的评论这里用户支付升级费用后如何更新应用程序也可能与您的计划有关。如果您的升级设计使Apple脱离了收入循环,那么它就是一个入门者。

更新:

只是基于以下评论进行澄清:是的,有时您确实需要要求用户升级。但是,这与从一开始设计应用程序以强迫用户在开发人员每次发布新版本时进行升级都大不相同。

这种设计旨在简化开发人员的生活,而不是简化用户的生活。每次用户不得不花时间升级以获得他们不希望甚至不想得到的好处时,您就从客户那里获取了时间和资源。将开发人员的时间和精力转移给用户的设计是糟糕的设计,因为人们最终为了自己的利益而购买软件。当您减少收益时,就会降低软件的最终获利能力。

因此,除非是绝对的技术必要性,否则任何设计人员都不应设计强迫用户执行用户不希望做的事情的软件。这当然是一个经验法则,但这是一个很好的法则。


我不明白为什么这篇文章被这么多赞。OP并没有询问“应该强迫iPhone用户升级应用程序吗?” 因此,此回复未解决问题,只是一个意见。有很多正当的理由为什么您需要强迫用户进行升级。只要看看Xbox Live,它已经投入生产多年,并且拥有庞大的用户群。它要求用户在每次有新更新可用时都更新仪表板。
我否决了这个答案。我并不傻,我不需要讲道的答案。我知道,如果没有充分的理由,强迫用户做某事不是一个好主意。我碰巧有一个非常非常好的理由这样做,而我来到这里是为了希望找到实现它的最佳方法。
我同意“强制用户”确实是不良行为。但是,在某些情况下,可能需要强制更新路径。例如,我之所以寻找这个答案,是因为我有一个基于多用户持久服务器的游戏(有点像MMORPG),并且每次向服务器添加可能与之不兼容的功能时,都需要强制进行更新。旧版本。但是,这是一个奇怪的用例。大多数时候,可以设计出更好的解决方案。
我不同意,强迫用户进行更新并不是一个坏主意。如果您正在制作游戏,并且用户发现了可以使他们提高在线分数或成就的漏洞,该怎么办?如果开发人员修复了漏洞并发布了更新,则作弊者不会“想要”升级,因为他们知道更新会阻止他们作弊。如果您不能强制更新,那么如何防止作弊者使用该漏洞利用程序?你不能!对于所有热爱您的游戏并选择不作弊的玩家来说,这都是灾难性的情况,他们只会停止游戏。你的想法?
我不同意,当然,您需要强迫用户进行一些更新。
另外,网站本质上是“强迫用户”一直更新。由于所有内容都在服务器端,因此开发人员一时兴起,无需用户同意即可更新网站。多年来,Google,Facebook甚至SO的变更频率是多少?所有网站都会一直更新,这迫使用户不选择就使用“最新版本”。

9> 小智..:

正是由于这个原因,我对App Store的应用更新刚刚被拒绝。我们添加了一项功能,可根据当前版本检查已安装的版本,如果它不是受支持的版本,则会强制其进行更新。

苹果对此表示拒绝。

回到设计板!


如果他们始终使用最新版本进行测试,他们如何发现您显示此屏幕?
推荐阅读
李桂平2402851397
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有