好久了,一直想写点东西分享,苦于一直自己都是囊中羞涩,一直以来都在拿来主义,感谢那些无私奉献自己研究成果的先辈们,多不容易呀,希望以后我也能多写点自己的经验上来,廖表心意!
好啦,废话少叙。今天发现一个关于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里面即可读取到。
上面就是我自己采用的方法,如果有人有更好的方法,欢迎拍砖!廖表心意!