实现地理位置消息功能
更新时间: 2025/09/11 14:15:56
自 IM UIKit v9.3.0 开始,IM UIKit 的会话消息模块(NEChatUIKit)支持地理位置消息功能。
功能介绍
IM UIKit 的默认界面已经实现了地理位置消息的发送按钮、UI 展示和接收逻辑。仅需三步,即可在您的应用实现地理位置消息的收发。
前提条件
开始集成地理位置消息功能前,请确保:
- 已在 高德开放平台 获取到 高德地图的 API Key。
- (可选)已在 高德开放平台 获取到 高德静态地图的 Web API Key。
- 由于 iOS 系统对用户定位隐私相关的权限控制持续升级,因此在使用高德地图服务前,可能需要先配置定位权限,具体请参考权限配置。
- iOS 应用程序通过 URL Scheme 跳转至高德地图并实现导航功能,因此实现地理消息功能前需要先在您的工程中设置 URL Scheme,具体请参考 配置高德地图 URL Scheme。
实现流程
步骤1:引入依赖
-
在
Podfile文件中引入NEMapKit模块的组件。platform :ios, '13.0' # 请使用您的真实项目名称替换 your project name target 'your project name' do # Comment the next line if you don't want to use dynamic frameworks use_frameworks! # 基础库 pod 'NEChatKit', '10.8.0' # UI 组件 pod 'NEChatUIKit', '10.8.0' # 会话(聊天)组件 pod 'NEContactUIKit', '10.8.0' # 通讯录组件 pod 'NEConversationUIKit', '10.8.0' # 云端会话列表组件。如果使用云端会话,则不需要依赖下面本地会话列表组件,与本地会话组件二者选其一 pod 'NELocalConversationUIKit', '10.8.0' # 本地会话列表组件。如果使用本地会话,则不需要依赖上面云端会话列表组件,与云端会话组件二者选其一 pod 'NETeamUIKit', '10.8.0' # 群相关设置组件 # 扩展库-地理位置组件 pod 'NEMapKit', '10.8.0' end -
执行
pod install命令导入组件。
如果需要在 Objective-C 项目中导入组件,头文件引用请参考以下引用方式。
#import <NEConversationUIKit/NEConversationUIKit-Swift.h>
#import <NEContactUIKit/NEContactUIKit-Swift.h>
#import <NEChatUIKit/NEChatUIKit-Swift.h>
#import <NETeamUIKit/NETeamUIKit-Swift.h>
#import <NERtcCallUIKit/NERtcCallUIKit.h>
#import "NEMapKit/NEMapKit-Swift.h"
...
步骤2:初始化与登录
完成 IM UIKit 的初始化与登录,具体请参考 初始化与登录。
初始化
// init
// 设置IM SDK的配置项,包括AppKey,推送配置和一些全局配置等
let option = NIMSDKOption()
option.appKey = "your app key"
option.apnsCername = "网易云信控制台配置的 APNS 推送证书名称"
option.pkCername = "网易云信控制台配置的 PushKit 推送证书名称"
// 设置IM SDK V2的配置项,包括是否使用旧的登录接口和是否使用云端会话
let v2Option = V2NIMSDKOption()
v2Option.enableV2CloudConversation = false
// 初始化IM UIKit,初始化Kit层和IM SDK,将配置信息透传给IM SDK。无需再次初始化IM SDK
IMKitClient.instance.setupIM2(option, v2Option)
// 设置IM SDK的配置项,包括AppKey,推送配置和一些全局配置等
NIMSDKOption *option = [NIMSDKOption optionWithAppKey:AppKey];
// 设置IM SDK V2的配置项,包括是否使用旧的登录接口和是否使用云端会话
V2NIMSDKOption *v2Option = [[V2NIMSDKOption alloc] init];
v2Option.enableV2CloudConversation = NO;
// 初始化IM UIKit,初始化Kit层和IM SDK,将配置信息透传给IM SDK。无需再次初始化IM SDK
[IMKitClient.instance setupIM2:option :v2Option];
登录
IMKitClient.instance.login(account, token, nil) { error in
if let err = error {
print("IMKitClient login error : ", err)
}else {
//在登录成功回调中初始化路由以及配置各个模块首页
/*
weakSelf?.setupTabbar()
*/
}
}
[[IMKitClient instance] login:@"account" :@"token" :nil :^(NSError * _Nullable error) {
if (error != nil) {
NSLog(@"IMKitClient login error : %@", [error description]);
} else {
//在登录成功回调中初始化路由以及配置各个模块首页
/*
[weakSelf setupTabbar];
*/
}
}];
步骤3:配置高德地图服务
地理位置消息功能基于高德地图,因此需要您在应用中配置高德地图的 API Key 和 Web API Key(静态地图,可选)。
在初始化路由的同时,调用 setupMapClient 方法设置高德地图的 API Key 和 Web API Key(可选),对地图 Map 进行初始化。
高德地图的 Web API Key,主要用于发送位置消息调用该服务生成图片来展示,提高页面加载性能。
/// 地图组件初始化
/// - appkey: 高德地图的 API Key
/// - serverKey: 高德地图的 Web API Key, 没有则传 ""
NEMapClient.shared().setupMapClient(withAppkey: "gaodeMap Appkey", withServerKey: "gaodeMap web server key")
/// 地图组件初始化
/// - appkey: 高德地图的 API Key
/// - serverKey: 高德地图的 Web API Key, 没有则传 ""
[NEMapClient.shared setupMapClientWithAppkey:@"gaodeMap Appkey" withServerKey:@"gaodeMap web server key"];
若需要注册个人设置页面,实现单击头像后跳转至个人设置页面的功能,首先需要在 XCode 中拖入相关的源码文件至您的工程。相关的源码文件包括:
完成 Map 初始化并 集成会话消息界面 后,您的应用即可实现地理位置消息功能。
常见问题
为什么地图没有定位到当前位置?
-
确认手机已打开定位服务。
-
确认应用已授权位置权限。
-
确认在日志中是否出现如下类似报错:
定位失败, code:7 -->> KEY错误。一般导致该错误的原因为高德地图配置打包机器的 SHA1 和高德控制台配置的 不一致。将日志上打印出来的 SHA1 配置到高德地图即可解决,更多详情参见 高德开放平台的常见问题。
为什么无法跳转至高德地图/百度地图?
iOS 应用程序通过 URL Scheme (通过 URL 协议来调用其他应用程序的机制)跳转至高德/百度地图并实现导航功能。
高德/百度地图 iOS SDK 提供了自己的 URL Scheme,通过该 Scheme,可以启动高德/百度地图应用程序并传递特定的参数来实现导航功能。
因此实现地理消息功能前需要先在您的工程中配置 URL Scheme。具体请参考 配置高德地图 URL Scheme 和 配置百度地图 URL Scheme。

其他高德地图问题
如遇到其他报错,可参考 高德开放平台的错误码列表 和 高德开放平台的常见问题 进行排查。





