Siri 支持:INPlayMediaIntent 支持哪些意图参数?
Siri Support: What are supported intent parameters for INPlayMediaIntent?
我创建了一个 iOS 应用程序扩展,并在扩展的 plist IntentsSupported 数组中定义了一个条目 INPlayMediaIntent。一切都很好。
但是几天后(WWDC 2019)我无法将应用程序提交到 TestFlight/App Store Connect。
我按照 Apple 的说明修复了这些错误:
- ITMS-90626:无效的 Siri 支持 - 没有提供示例短语
INPlayMediaIntent 在...语言中。请参考“https://developer.apple.com/documentation/sirikit/registering_custom_vocabulary_with_sirikit/global_vocabulary_reference/intent_phrases”
- ITMS-90626:无效的 Siri 支持 - 没有为包指定意图参数……语言……词汇政策 #1
现在我试图在 AppIntentVocabulary.plist 此处提供一个意图参数:
<dict>
<key>ParameterVocabularies</key>
<array>
<dict>
<key>ParameterNames</key>
<array>
<string>INPlayMediaIntent.mediaItems</string>
</array>
我尝试了各种字符串,根据这些 App Store 电子邮件,所有字符串都是错误的:
ITMS-90626:无效的 Siri 支持 - "INPlayMediaIntent.mediaItems" 不是订阅意图的受支持意图参数
ITMS-90626:无效的 Siri 支持 - "INPlayMediaIntent.mediaContainer" 不是订阅意图的受支持意图参数
ITMS-90626:无效的 Siri 支持 - "INPlayMediaIntent.identifier" 不是订阅意图的受支持意图参数
INPlayMediaIntent的有效参数名称是什么?
它可以如此简单,因为 Apple 在这里有一个 INPlayMediaIntent 的示例项目,我曾经为我的项目学习过它:
https://developer.apple.com/documentation/sirikit/media/playing_media_through_siri_shortcuts
但是:这个项目似乎不是最新的,因为它缺少最近似乎需要的 AppIntentVocabulary.plist。
我联系了 Apple 的开发者支持并得到了这个答案:
“您应该能够将您的应用程序提交到 AppstoreConnect 而不会看到这些警告。请提交有关此问题的完整错误报告……”
我还原了试图修复初始错误消息的更改,而我当前的构建不再收到警告。
以这种方式处理意图:
- (void)application:(UIApplication *)application handleIntent:(INIntent *)intent completionHandler:(void (^)(INIntentResponse * _Nonnull))completionHandler {
INPlayMediaIntent *mediaIntent = (INPlayMediaIntent *)intent;
INMediaItem *mediaItem = [mediaIntent.mediaItems firstObject];
NSString *myId = mediaItem.identifier;
INMediaItemType mediaType = mediaItem.type;
// play some media identified by myId and mediaType
INPlayMediaIntentResponse *response = [[INPlayMediaIntentResponse alloc] initWithCode:INPlayMediaIntentResponseCodeSuccess userActivity:nil];
completionHandler(response);
}
我想回答实际问题,因为文档在这方面具有误导性。如果它是正确的,那么只允许“来自意图 class 的 属性 名称的关键路径 [s]”,这对 INPlayMediaIntent
s 没有任何意义。为了找到正确的答案,我看了 Design high quality Siri media interactions 和 12:20,我们可以看到一张幻灯片,其中包含从用户词汇符号(强类型)到要在 [=27 中使用的字符串的映射=].
检查某个键是否受支持的一般思路是转到 INVocabularyStringType 并检查以相应 Siri 域(在本例中为 media<SomeThing>
)开头的键,然后使用 INPlayMediaIntent.someThing
用于 plist 中的 ParameterNames
数组。
在 Managing Audio with SiriKit 示例代码中,我们可以看到使用 INPlayMediaIntent.playlistTitle
的示例。
我创建了一个 iOS 应用程序扩展,并在扩展的 plist IntentsSupported 数组中定义了一个条目 INPlayMediaIntent。一切都很好。 但是几天后(WWDC 2019)我无法将应用程序提交到 TestFlight/App Store Connect。
我按照 Apple 的说明修复了这些错误:
- ITMS-90626:无效的 Siri 支持 - 没有提供示例短语 INPlayMediaIntent 在...语言中。请参考“https://developer.apple.com/documentation/sirikit/registering_custom_vocabulary_with_sirikit/global_vocabulary_reference/intent_phrases”
- ITMS-90626:无效的 Siri 支持 - 没有为包指定意图参数……语言……词汇政策 #1
现在我试图在 AppIntentVocabulary.plist 此处提供一个意图参数:
<dict>
<key>ParameterVocabularies</key>
<array>
<dict>
<key>ParameterNames</key>
<array>
<string>INPlayMediaIntent.mediaItems</string>
</array>
我尝试了各种字符串,根据这些 App Store 电子邮件,所有字符串都是错误的:
ITMS-90626:无效的 Siri 支持 - "INPlayMediaIntent.mediaItems" 不是订阅意图的受支持意图参数
ITMS-90626:无效的 Siri 支持 - "INPlayMediaIntent.mediaContainer" 不是订阅意图的受支持意图参数
ITMS-90626:无效的 Siri 支持 - "INPlayMediaIntent.identifier" 不是订阅意图的受支持意图参数
INPlayMediaIntent的有效参数名称是什么?
它可以如此简单,因为 Apple 在这里有一个 INPlayMediaIntent 的示例项目,我曾经为我的项目学习过它:
https://developer.apple.com/documentation/sirikit/media/playing_media_through_siri_shortcuts
但是:这个项目似乎不是最新的,因为它缺少最近似乎需要的 AppIntentVocabulary.plist。
我联系了 Apple 的开发者支持并得到了这个答案:
“您应该能够将您的应用程序提交到 AppstoreConnect 而不会看到这些警告。请提交有关此问题的完整错误报告……”
我还原了试图修复初始错误消息的更改,而我当前的构建不再收到警告。
以这种方式处理意图:
- (void)application:(UIApplication *)application handleIntent:(INIntent *)intent completionHandler:(void (^)(INIntentResponse * _Nonnull))completionHandler {
INPlayMediaIntent *mediaIntent = (INPlayMediaIntent *)intent;
INMediaItem *mediaItem = [mediaIntent.mediaItems firstObject];
NSString *myId = mediaItem.identifier;
INMediaItemType mediaType = mediaItem.type;
// play some media identified by myId and mediaType
INPlayMediaIntentResponse *response = [[INPlayMediaIntentResponse alloc] initWithCode:INPlayMediaIntentResponseCodeSuccess userActivity:nil];
completionHandler(response);
}
我想回答实际问题,因为文档在这方面具有误导性。如果它是正确的,那么只允许“来自意图 class 的 属性 名称的关键路径 [s]”,这对 INPlayMediaIntent
s 没有任何意义。为了找到正确的答案,我看了 Design high quality Siri media interactions 和 12:20,我们可以看到一张幻灯片,其中包含从用户词汇符号(强类型)到要在 [=27 中使用的字符串的映射=].
检查某个键是否受支持的一般思路是转到 INVocabularyStringType 并检查以相应 Siri 域(在本例中为 media<SomeThing>
)开头的键,然后使用 INPlayMediaIntent.someThing
用于 plist 中的 ParameterNames
数组。
在 Managing Audio with SiriKit 示例代码中,我们可以看到使用 INPlayMediaIntent.playlistTitle
的示例。