通过App跳转App Store显示Open而非Update按钮问题及Swift转OC需求
App Store跳转显示Open而非Update的问题及Swift转Objective-C代码解答
一、关于App Store跳转显示Open按钮的问题
我之前也碰到过一模一样的情况,大概率是你用的itms://协议跳转存在缓存适配问题!
itms://是比较老旧的唤起App Store的协议,它跳转时更偏向于复用设备本地缓存的App状态信息,不会实时向App Store服务器拉取最新的更新状态。这就导致明明App有新版本,但跳转后还是显示Open按钮;而直接在App Store搜索时,是实时请求服务器数据,所以能正确展示Update按钮。
解决方法很简单,把itms://替换成https://格式的App Store官方链接就行:
NSString *iTunesLink = @"https://apps.apple.com/qa/app/my-App/id1123444387?mt=8"; [[UIApplication sharedApplication] openURL:[NSURL URLWithString:iTunesLink]];
换成https链接后,每次跳转都会实时请求App Store服务器获取当前App的最新状态,就能正确显示Update按钮了。如果还是不行,可以尝试下拉刷新App Store页面,或者重启设备清除一下App Store的本地缓存。
二、Swift代码转Objective-C代码
下面是你提供的Swift代码对应的Objective-C实现,我做了更优雅的版本(用方法存在性判断代替版本号判断,避免版本判断的潜在兼容问题):
NSString *urlStr = @"itms://itunes.apple.com/qa/app/my-App/id1135248687?mt=8"; NSURL *targetURL = [NSURL URLWithString:urlStr]; if ([[UIApplication sharedApplication] respondsToSelector:@selector(openURL:options:completionHandler:)]) { // iOS 10及以上版本调用新API [[UIApplication sharedApplication] openURL:targetURL options:@{} completionHandler:nil]; } else { // iOS 10以下版本调用旧API [[UIApplication sharedApplication] openURL:targetURL]; }
如果你更习惯用系统版本判断,也可以这样写:
NSString *urlStr = @"itms://itunes.apple.com/qa/app/my-App/id1135248687?mt=8"; NSURL *targetURL = [NSURL URLWithString:urlStr]; if ([[UIDevice currentDevice].systemVersion floatValue] >= 10.0) { [[UIApplication sharedApplication] openURL:targetURL options:@{} completionHandler:nil]; } else { [[UIApplication sharedApplication] openURL:targetURL]; }
两种方式都能正常工作,但前者的兼容性更好,比如遇到某些特殊系统版本时不会出错。
内容的提问来源于stack exchange,提问作者Naqi
相关产品推荐
相关产品推荐

