实现地理位置消息功能
更新时间: 2024/03/15 18:26:21
自 IM UIKit v9.3.0 开始,IM UIKit 的会话消息模块(NEChatUIKit
)支持地理位置消息功能。
功能介绍
IM UIKit 的默认界面已经实现了地理位置消息的发送按钮、UI 展示和接收逻辑。仅需三步,即可在您的应用实现地理位置消息的收发。
前提条件
开始集成地理位置消息功能前,请确保:
- 已在高德开放平台获取到高德地图的 API Key。
- 由于 iOS 系统对用户定位隐私相关的权限控制持续升级,因此在使用高德地图服务前,可能需要先配置定位权限,具体请参考权限配置。
- iOS 应用程序通过 URL Scheme 跳转至高德地图并实现导航功能,因此实现地理消息功能前需要先在您的工程中设置 URL Scheme,具体请参考配置高德地图 URL Scheme。
实现流程
步骤1:引入依赖
-
在
Podfile
文件中引入NEMapKit
模块的组件。platform :ios, '9.0' target 'your project name' do # Comment the next line if you don't want to use dynamic frameworks use_frameworks! pod 'NEConversationUIKit', '9.3.0' //会话列表组件 pod 'NEChatUIKit', '9.3.0'//单聊群聊组件 pod 'NEContactUIKit', '9.3.0'//通讯录组件 pod 'NETeamUIKit', '9.3.0'//群相关设置组件 pod 'NEMapKit', '9.3.1'//地理位置组件 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>
...
步骤2:初始化与登录
完成 IM UIKit 的初始化与登录,具体请参考初始化与登录。
初始化
let option = NIMSDKOption()
option.appKey = "your app key"
option.apnsCername = "云信控制台配置的 APNS 推送证书名称"
IMKitClient.instance.setupCoreKitIM(option)
let _ = NEAtMessageManager.instance
- (void)setupInit {
// 初始化NIMSDK
NIMSDKOption *option = [NIMSDKOption optionWithAppKey:AppKey];
option.apnsCername = "云信控制台配置的 APNS 推送证书名称" // 若不需要推送,可不填
[[IMKitClient instance] setupCoreKitIM:option];
// 登录IM之前先初始化 @ 消息监听mananger
NEAtMessageManager * _ = [NEAtMessageManager instance];
}
登录
IMKitClient.instance.loginIM(accid, token) { error in
if let err = error {
print("NEKitCore login error : ", err)
}else {
//在登录成功回调中初始化路由以及配置各个模块首页
/*
weakSelf?.setupTabbar()
*/
}
}
[[IMKitClient instance] loginIM:@"chenyu4" :@"123456" :^(NSError * _Nullable error) {
if (error != nil) {
NSLog(@"NEKitCore login error : %@", [error description]);
} else {
//在登录成功回调中初始化路由以及配置各个模块首页
/*
[self setupTabbar];
*/
}
}];
步骤3:配置高德地图服务
地理位置消息功能基于高德地图,因此需要您在应用中配置高德地图的 API Key。
在初始化路由的同时,调用 setupMapClient
方法设置高德地图的 API Key,对地图 Map 进行初始化。
func loadService() {
//初始化路由
ContactRouter.register()
ChatRouter.register()
TeamRouter.register()
ConversationRouter.register()
//注册个人设置页面,用于实现单击头像后跳转至个人设置页面功能
Router.shared.register(MeSettingRouter) { param in
if let nav = param["nav"] as? UINavigationController {
let me = PersonInfoViewController()
nav.pushViewController(me, animated: true)
}
}
//地图map初始化
NEMapClient.shared().setupMapClient(withAppkey: AppKey.gaodeMapAppkey)
}
- (void)registerRouter {
[ContactRouter register];
[ChatRouter register];
[TeamRouter register];
[ConversationRouter register];
//注册个人设置页面,用于实现单击头像后跳转至个人设置页面功能
[[Router shared] register:MeSettingRouter
closure:^(NSDictionary<NSString *, id> *_Nonnull param) {
NSObject *param1 = [param objectForKey:@"nav"];
if ([param1 isKindOfClass:[UINavigationController class]]) {
UINavigationController *nav = (UINavigationController *)param1;
PersonInfoViewController *me =
[[PersonInfoViewController alloc] init];
[nav pushViewController:me animated:YES];
}
}];
//地图map初始化
[[NEMapClient shared] setupMapClientWithAppkey:@"gaodeMap Appkey"];
}
若需要注册个人设置页面,实现单击头像后跳转至个人设置页面的功能,首先需要在 XCode 中拖入相关的源码文件至您的工程。相关的源码文件包括:
完成 Map 初始化并集成会话消息界面后,您的应用即可实现地理位置消息功能。
常见问题
为什么地图没有定位到当前位置?
-
确认手机已打开定位服务。
-
确认应用已授权位置权限。
-
确认在日志中是否出现如下类似报错:
定位失败, code:7 -->> KEY错误
。一般导致该错误的原因为高德地图配置打包机器的 SHA1 和高德控制台配置的不一致。将日志上打印出来的 SHA1 配置到高德地图即可解决,更多详情参见高德开放平台的常见问题。
为什么无法跳转至高德地图/百度地图?
iOS 应用程序通过 URL Scheme (通过 URL 协议来调用其他应用程序的机制)跳转至高德/百度地图并实现导航功能。
高德/百度地图 iOS SDK 提供了自己的 URL Scheme,通过该 Scheme,可以启动高德/百度地图应用程序并传递特定的参数来实现导航功能。
因此实现地理消息功能前需要先在您的工程中配置 URL Scheme。具体请参考配置高德地图 URL Scheme和配置百度地图 URL Scheme。
其他高德地图问题
如遇到其他报错,可参考高德开放平台的错误码列表和高德开放平台的常见问题进行排查。