如何用Swift编程创建直接打开谷歌地图的Siri快捷方式?
直接通过Siri快捷方式打开谷歌地图的解决方案
你当前的实现会先唤起自身App再跳转谷歌地图,核心问题在于用了NSUserActivity——这类快捷方式本质是先触发你的App,再由App中转跳转。要实现直接打开谷歌地图,得换用INOpenMapsIntent构建快捷方式,绕开自身App的中转环节。
一、替换快捷方式创建代码
直接基于地图意图构建快捷方式,让Siri执行时直接唤起谷歌地图(前提是设备已安装):
import Intents // 创建打开地图的意图 let openMapsIntent = INOpenMapsIntent() // 可选:设置目的地坐标,留空则直接打开谷歌地图首页 openMapsIntent.destination = INPlacemark(placemark: MKPlacemark(coordinate: CLLocationCoordinate2D(latitude: 39.9042, longitude: 116.4074))) // 示例:北京坐标 openMapsIntent.transportType = .automobile // 可选设置出行方式,比如驾车、步行 // 构建快捷方式 let shortcut = INShortcut(intent: openMapsIntent) let addShortcutButton = INUIAddVoiceShortcutButton(style: .whiteOutline) addShortcutButton.shortcut = shortcut addShortcutButton.suggestedInvocationPhrase = "打开谷歌地图" // 设置语音唤起的短语 addShortcutButton.delegate = self view.addSubview(addShortcutButton)
二、删除AppDelegate中的中转逻辑
现在快捷方式直接触发谷歌地图,不需要你的App再做中转,删掉application(_:continue:restorationHandler:)里对应comgooglemaps的处理代码即可。
三、配置Info.plist必要项
确保App已配置以下权限,避免功能异常:
- 若需要设置目的地坐标,添加
NSLocationWhenInUseUsageDescription,填写位置权限申请说明 - 在
LSApplicationQueriesSchemes数组中添加comgooglemaps,确保App能检测谷歌地图是否安装
补充说明
- 这个方案依赖系统的
INOpenMapsIntent,会自动调用用户设置的默认地图App,如果要强制打开谷歌地图,需要用户先把谷歌地图设为默认地图App; - 可以在创建快捷方式前先检测谷歌地图是否安装,代码示例:
let googleMapsURL = URL(string: "comgooglemaps://")! if UIApplication.shared.canOpenURL(googleMapsURL) { // 已安装,创建快捷方式 } else { // 未安装,提示用户下载 }
内容的提问来源于stack exchange,提问作者Roei Nadam
相关产品推荐
相关产品推荐

