【iOS】获取app版本更新检测的不同语言信息

           好久了,一直想写点东西分享,苦于一直自己都是囊中羞涩,一直以来都在拿来主义,感谢那些无私奉献自己研究成果的先辈们,多不容易呀,希望以后我也能多写点自己的经验上来,廖表心意!

         好啦,废话少叙。今天发现一个关于app版本更新提示的小问题,版本更新检测然后提示用户去app store更新的功能大家都不陌生,百度一下就能找到具体做法,这里稍提一下:大家的做法很多都是利用访问:http://itunes.apple.com/lookup?id=你的应用程序的ID,这个url来获取app的信息,然后对比本地版本号来做相应的显示。当然也有很多自己app的有自己的服务器,更新提示也都放在自己的服务器上,这个就不存在什么问题了。

        我做更新提示的时候也是用的比较传统的方法,当时也是直接拿来主义,但是今天我发现这样做存在一点点问题,也是小问题,不过网上的前辈们好像都没提到,所以我在这里记录一下。现象是这样,我的app是双语言版本:中文和英文。英文作为主语言,在调用这个url的时候,获取到的信息全是英文的,这样问题就来了,如果我的手机系统是中文的,显示的还是英文,这样体验就不好了,查了一个上午,大家都提到这个问题,我就按我的理解解决了,具体做法是这样的:

查看官方文档http://www.apple.com/itunes/affiliates/resources/documentation/itunes-store-web-service-search-api.html,里面有这样的一个点,如下图:

 

这个点很重要,这个是利用搜索的方法定位到自己的app,里面的"country"条件给了灵感,"term"也就是自己的搜索名称了,所以很明显,只要我搜索自己app中文的名称,指定国家就能获取到自己的app了,更新信息也就拿到手了。废话不多说,直接上码:

 

- (NSString*)getPreferredLanguage
{
    NSUserDefaults* defs = [NSUserDefaults standardUserDefaults];
    NSArray* languages = [defs objectForKey:@"AppleLanguages"];
    NSString* preferredLang = [languages objectAtIndex:0];
    return preferredLang;
}

- (void)getVersionFromAppStore
{
    NSDictionary *infoDic = [[NSBundle mainBundle] infoDictionary];
    NSString *currentVersion = [infoDic objectForKey:@"CFBundleVersion"];
    
    NSString *URL = nil;
    if([[self getPreferredLanguage] isEqualToString:@"zh-Hans"]){
        URL = @"https://itunes.apple.com/search?term=app的中文名称&country=cn&entity=software";
        URL = [URL stringByAddingPercentEscapesUsingEncoding: NSUTF8StringEncoding];
    }else{
        URL = [NSString stringWithFormat:@"http://itunes.apple.com/lookup?id=%@",APP_ID];
    }
    
    NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
    [request setURL:[NSURL URLWithString:URL]];
    [request setHTTPMethod:@"POST"];
    NSHTTPURLResponse *urlResponse = nil;
    NSError *error = nil;
    NSData *recervedData = [NSURLConnection sendSynchronousRequest:request returningResponse:&urlResponse error:&error];
    NSString *results = [[NSString alloc] initWithBytes:[recervedData bytes] length:[recervedData length] encoding:NSUTF8StringEncoding];
    NSDictionary *dic = [NSDictionary dictionaryWithJSONString:results];
    NSArray *infoArray = [dic objectForKey:@"results"];
    
    if ([infoArray count]) {
        releaseInfo = [infoArray objectAtIndex:0];
        NSString *lastVersion = [releaseInfo objectForKey:@"version"];
        BOOL neverRemind = [[NSUserDefaults standardUserDefaults] boolForKey:lastVersion];
        if (![lastVersion isEqualToString:currentVersion] && !neverRemind) {
             [self performSelectorOnMainThread:@selector(show) withObject:nil waitUntilDone:NO];
        }
    }
}

看代码就可以知道,我获取app信息的时候,url分成两种情况,如果系统语言是中文,就采用搜索定位的方法,如果不是,直接使用appid定位即可,使用上面代码中把“app的中文名称”换成自己app的中文名称即可,获取到的信息,在infoArray里面即可读取到。

 

上面就是我自己采用的方法,如果有人有更好的方法,欢迎拍砖!廖表心意!
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值