实现地理位置消息功能
更新时间: 2023/07/21 06:56:02
自 IM UIKit v1.1.0 开始,IM UIKit 的会话消息模块(nim_chatkit_ui
)支持地理位置消息功能。
功能介绍
IM UIKit 的默认界面已经实现了地理位置消息的发送按钮、UI 展示和接收逻辑。仅需三步,即可在您的应用实现地理位置消息的收发。
如果您的应用不需要地理位置消息的发送按钮,您也可以将其从界面上移除。
前提条件
开始集成地理位置消息功能前,请确保:
- 已集成会话界面。
- 已在高德开放平台获取到高德地图的 API Key。
- 确保已经开通了地图和定位权限。
实现方法
实现地理位置消息收发
步骤1:配置权限
由于高德地图 Flutter 版本的限制,Android 需要先集成原生的高德 SDK,再进行权限配置。
-
在 Project 的 build.gradle 文件配置 repositories,添加 maven 仓库地址。
allprojects { repositories { mavenCentral() } }
-
在主工程的 build.gradle 文件配置 dependencies。
dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) //高德地图功能 implementation 'com.amap.api:3dmap:latest.integration' //搜索功能 implementation 'com.amap.api:search:latest.integration' }
-
在 Android 的 manifest 文件中配置权限以及高德定位需要的 Service。
xml
<!-- 地图定位权限 --> <!--允许获取精确位置,精准定位必选--> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <!--允许获取粗略位置,粗略定位必选--> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <!--用于申请调用A-GPS模块,卫星定位加速--> <uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" /> <!--允许写设备缓存,用于问题排查--> <uses-permission android:name="android.permission.WRITE_SETTINGS" /> <!-- 高德地图定位 --> <!-- 配置高德定位Service --> <service android:name="com.amap.api.location.APSService"/>
-
在 Info.plist 文件中配置位置权限。
<key>NSLocationAlwaysAndWhenInUseUsageDescription</key> <string>请点击“允许”以允许访问。 若不允许,将无法使用位置信息功能。</string> <key>NSLocationAlwaysUsageDescription</key> <string>请点击“允许”以允许访问。 若不允许,将无法使用位置信息功能。</string> <key>NSLocationWhenInUseUsageDescription</key> <string>请点击“允许”以允许访问。 若不允许,将无法使用位置信息功能。</string>
-
在 Podfile 文件中增加位置权限。
## dart: [PermissionGroup.location, PermissionGroup.locationAlways, PermissionGroup.locationWhenInUse] 'PERMISSION_LOCATION=1',
步骤2:配置高德地图需要的appkey
请参考 demo 的 config.dart 文件配置。
dart//高德Android Key
static const AMapAndroid = 'your amap android key';
//高德IOS Key
static const AMapIOS = 'your amap ios key';
//设置到chatKit中
ChatKitClient.instance.aMapIOSKey = IMDemoConfig.AMapIOS;
ChatKitClient.instance.aMapAndroidKey = IMDemoConfig.AMapAndroid;
初始化完成后,您的应用即可实现地理位置消息功能。
实现按钮移除
会话消息模块(nim_chatkit_ui
)也支持移除发送地图位置消息的按钮。
如果您的业务不再需要地图功能,去除发送地图位置消息的按钮。
示例代码:
dartChatKitClient.instance.chatUIConfig = ChatUIConfig(moreActions: [
//此处添加自己需要展示的action
ActionItem(
type: ActionConstants.shoot,
icon: SvgPicture.asset(
'images/ic_shoot.svg',
package: kPackage,
),
title: S.of(context).chatMessageMoreShoot,
permissions: [Permission.camera],
onTap: _onShootActionTap),
ActionItem(
type: ActionConstants.file,
icon: SvgPicture.asset(
'images/ic_file.svg',
package: kPackage,
),
title: S.of(context).chatMessageMoreFile,
permissions: [Permission.storage],
onTap: _onFileActionTap)
],
//如果为false则不展示默认的action,
//如此即可去除位置消息按钮
keepDefaultMoreAction: false);
常见问题
为什么地图没有定位到当前位置?
-
确认手机已打开定位服务。
-
确认应用已授权位置权限。
-
确认在日志中是否出现如下类似报错:
定位失败, code:7 -->> KEY错误
。一般导致该错误的原因为高德地图配置打包机器的 SHA1 和高德控制台配置的不一致。将日志上打印出来的 SHA1 配置到高德地图即可解决,更多详情参见高德开放平台的常见问题。
其他高德地图问题
如遇到其他报错,可参考高德开放平台的错误码列表和高德开放平台的常见问题进行排查。