You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

通过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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 07:00:03