实现地理位置消息功能

更新时间: 2025/09/11 14:15:56

自 IM UIKit v9.3.0 开始,IM UIKit 的会话消息模块(NEChatUIKit)支持地理位置消息功能。

功能介绍

IM UIKit 的默认界面已经实现了地理位置消息的发送按钮、UI 展示和接收逻辑。仅需三步,即可在您的应用实现地理位置消息的收发。

前提条件

开始集成地理位置消息功能前,请确保:

实现流程

步骤1:引入依赖

  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
    
  2. 执行 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 的初始化与登录,具体请参考 初始化与登录

初始化

Swift
// 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)
Objective-C
// 设置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];

登录

Swift
IMKitClient.instance.login(account, token, nil) { error in
    if let err = error {
        print("IMKitClient login error : ", err)
    }else {
        //在登录成功回调中初始化路由以及配置各个模块首页
        /*
        weakSelf?.setupTabbar()
        */
    }
}
Objective-C
[[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,主要用于发送位置消息调用该服务生成图片来展示,提高页面加载性能。

Swift
/// 地图组件初始化
///   - appkey: 高德地图的 API Key
///   - serverKey: 高德地图的 Web API Key, 没有则传 ""
NEMapClient.shared().setupMapClient(withAppkey: "gaodeMap Appkey", withServerKey: "gaodeMap web server key")
Objective-C
/// 地图组件初始化
///   - appkey: 高德地图的 API Key
///   - serverKey: 高德地图的 Web API Key, 没有则传 ""
[NEMapClient.shared setupMapClientWithAppkey:@"gaodeMap Appkey" withServerKey:@"gaodeMap web server key"];

若需要注册个人设置页面,实现单击头像后跳转至个人设置页面的功能,首先需要在 XCode 中拖入相关的源码文件至您的工程。相关的源码文件包括:

  • app 下的 Mine 文件
  • app 下 Assets 中的 Mine 文件

完成 Map 初始化并 集成会话消息界面 后,您的应用即可实现地理位置消息功能。

常见问题

为什么地图没有定位到当前位置?

  • 确认手机已打开定位服务。

  • 确认应用已授权位置权限。

  • 确认在日志中是否出现如下类似报错:定位失败, code:7 -->> KEY错误。一般导致该错误的原因为高德地图配置打包机器的 SHA1 和高德控制台配置的 不一致

    将日志上打印出来的 SHA1 配置到高德地图即可解决,更多详情参见 高德开放平台的常见问题

为什么无法跳转至高德地图/百度地图?

iOS 应用程序通过 URL Scheme (通过 URL 协议来调用其他应用程序的机制)跳转至高德/百度地图并实现导航功能。

高德/百度地图 iOS SDK 提供了自己的 URL Scheme,通过该 Scheme,可以启动高德/百度地图应用程序并传递特定的参数来实现导航功能。

因此实现地理消息功能前需要先在您的工程中配置 URL Scheme。具体请参考 配置高德地图 URL Scheme配置百度地图 URL Scheme

地图URL.png

其他高德地图问题

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

此文档是否对你有帮助?
有帮助
去反馈
  • 功能介绍
  • 前提条件
  • 实现流程
  • 步骤1:引入依赖
  • 步骤2:初始化与登录
  • 步骤3:配置高德地图服务
  • 常见问题
  • 为什么地图没有定位到当前位置?
  • 为什么无法跳转至高德地图/百度地图?
  • 其他高德地图问题