You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

iOS应用中NSUserActivity无法在Shortcuts应用中显示的原因咨询

问题分析与解决方案

我前阵子帮朋友排查过几乎一模一样的问题,这确实是iOS 16及后续版本带来的系统行为变更——Apple调整了Shortcuts应用「应用」板块的展示逻辑,原来只靠NSUserActivity就能在那里显示的快捷指令,现在默认只会被归类到「Siri建议」里,不再主动出现在应用列表中。本质上是Apple在引导开发者转向Intents Framework来构建应用快捷方式,而非仅依赖NSUserActivity的预测能力。

不过你不用急着重构代码,先试试这几个低成本的调整,大概率能解决问题:

  • NSUserActivity加上targetContentIdentifier
    这个字段是iOS 13之后引入的,但在iOS 16之后对Shortcuts的展示逻辑影响变大,它能帮助系统更精准地识别和关联你的活动。修改你的代码如下:

    userActivityGo = [[NSUserActivity alloc] initWithActivityType:SIRI_MAIN_ACTIVITY_ID];
    userActivityGo.title = @"Launch App";
    userActivityGo.eligibleForPrediction = YES;
    userActivityGo.eligibleForSearch = YES;
    // 新增这一行,建议用反向域名格式的唯一标识,比如com.yourapp.yourbundle.go
    userActivityGo.targetContentIdentifier = @"com.yourapp.yourbundle.go";
    userActivityGo.userInfo = @{@"action" : @"go"};
    userActivityGo.requiredUserInfoKeys = [NSSet setWithArray:userActivityGo.userInfo.allKeys];
    self.userActivity = userActivityGo;
    
  • 检查activityType的格式
    你的SIRI_MAIN_ACTIVITY_ID必须是反向域名格式(比如com.yourapp.launch.main),不能是随便的字符串。如果之前用的是简单命名,iOS 16+可能无法正确识别并归类到应用板块。

  • 强制刷新系统索引
    有时候系统缓存会拖后腿,你可以试试这几步:

    1. 卸载重装你的应用
    2. 打开设置→「Siri与搜索」→找到你的应用,先关闭「来自App的建议」,过几秒再重新打开
    3. 重启设备,让系统重新扫描并索引你的NSUserActivity

如果上面的方法都不管用,那可能就得考虑补充基础的Intents实现了——其实不用做复杂的用户交互,只需要创建一个简单的INIntent子类和对应的处理扩展,就能让快捷指令稳定出现在Shortcuts的「应用」板块。不过这个步骤相对繁琐,优先试试前面的低成本方案。

内容的提问来源于stack exchange,提问作者Diego

火山引擎 最新活动