iOS应用如何加入谷歌地图分享列表以接收位置数据?
让你的iOS App出现在谷歌地图的分享打开列表里
嘿,这个需求我刚好折腾过!要让你的App出现在谷歌地图的分享选项里,核心是让iOS系统识别到你的App能处理地理位置类的内容。主要有两种实现方式,我给你一步步拆解:
1. 配置UTI支持(核心必做)
谷歌地图在分享位置时,会传递符合public.location这个UTI(统一类型标识符)的数据。你需要在App的Info.plist里声明支持这个类型,这样系统才会把你的App放进“打开方式”列表:
- 用Xcode操作的话,直接打开项目的「Info」标签页,找到「Document Types」点击加号新增:
- 「Name」随便填,比如“Location Handler”
- 「Types」里添加
public.location,还可以额外加上com.google.maps.place(谷歌自家的位置UTI,适配更精准)
- 如果你习惯直接编辑
Info.plist,就添加CFBundleDocumentTypes数组,对应填写上述字段即可。
2. 自定义URL Scheme(可选,方便直接传参)
如果想让谷歌地图直接通过URL唤起你的App并传递具体位置参数(比如经纬度),可以自定义一个URL Scheme:
- 还是在「Info」标签页,找到「URL Types」点击加号新增:
- 「Identifier」填你的App Bundle ID(比如
com.yourteam.yourapp) - 「URL Schemes」填你的自定义scheme,比如
myapp-location
- 「Identifier」填你的App Bundle ID(比如
- 接下来,你需要在App里处理这个Scheme的跳转请求:
在SceneDelegate(或AppDelegate,取决于你的项目架构)里添加处理逻辑:func scene(_ scene: UIScene, openURLContexts URLContexts: Set<UIOpenURLContext>) { guard let url = URLContexts.first?.url else { return } // 解析自定义Scheme里的位置参数 if url.scheme == "myapp-location" { let components = URLComponents(url: url, resolvingAgainstBaseURL: false) let lat = components?.queryItems?.first(where: { $0.name == "lat" })?.value let lon = components?.queryItems?.first(where: { $0.name == "lon" })?.value // 拿到经纬度后,跳转到你的App的位置处理页面就行 } }
3. 处理系统传递的位置数据
当用户从谷歌地图选择用你的App打开位置时,系统会把位置数据传递过来,你可以通过NSUserActivity来接收:
func scene(_ scene: UIScene, continue userActivity: NSUserActivity) { // 处理直接传递的位置数据 if userActivity.activityType == "com.apple.corelocation.location" { guard let location = userActivity.userInfo?[CLActivityUserInfoKey.location] as? CLLocation else { return } let latitude = location.coordinate.latitude let longitude = location.coordinate.longitude // 在这里使用经纬度做后续逻辑 } // 也可以处理谷歌地图的Web链接(用户复制链接后打开的情况) else if userActivity.activityType == NSUserActivityTypeBrowsingWeb { guard let url = userActivity.webpageURL else { return } // 解析谷歌地图URL里的位置参数,比如提取?q=lat,lon里的经纬度 } }
测试小技巧
配置完后,重新编译安装App到测试设备:
- 打开谷歌地图,选一个位置点击分享按钮
- 在弹出的列表里找你的App,如果没看到,下拉点「更多」,把你的App开关打开就行
- 点击你的App,检查是否能正确获取并解析位置数据
额外提醒
- 优先用Universal Links替代自定义Scheme(避免Scheme冲突,而且不会出现弹窗询问),配置方式类似,只是需要在你的域名下配置
apple-app-site-association文件 - 确保你的App有位置访问权限(如果需要在App内显示位置的话)
内容的提问来源于stack exchange,提问作者horseshoe7
相关产品推荐
相关产品推荐

