描述
融云与高德地图已停止合作, IMSDK 内置的高德地图 API Key 已过期,导致 SDK 无法正常发送内置的位置消息。
具体症状如下:
-
IM SDK 4.X
- 如果在 Manifest 中配置了客户自行申请的高德地图 API Key,发送地图消息失败。
- 如果只使用 IM SDK 中高德地图的信息,地图无法定位具体位置,无法执行发送地图消息。
-
IM SDK 5.X
- 如果只使用 IM SDK 中高德地图的信息,地图无法定位具体位置。
- 如果使用客户自行申请的高德地图 API Key 发送地图消息没有缩略图。
分析(根因分析、需求分析)
融云 IM SDK 在 4.1.2.16 和 5.6.7 及更早版本的 SDK 中内置的高德地图 API Key 已过期。您需要通过以下任一方式解决该问题:
- 升级 IM SDK 至 5.6.7 开发版及之后版本。
- 自行申请高德地图 API Key,以方案二方式替换 SDK 内置的高德地图 API Key。
解决方案
方案一:升级 IM SDK 版本
- IM SDK 5.6.7 开发版已经修复该问题。建议您及时升级至 5.6.7 或最新版本。
- IM SDK 5.5.X 稳定版暂未修复该问题。建议您采用方案二。
注意:目前无法通过仅升级到 4.X 最新版 IM SDK 解决该问题。使用 4.X 版本的客户可以考虑升级至 5.X 最新版 IM SDK,或者自行替换高德地图 API Key。
方案二:自行替换高德地图 API Key
注意:替换完成后,只要以下代码未删除,后续升级 IM SDK 后也将继续使用您自己的高德地图 API Key。
自行申请高德地图 ApiKey
IM SDK 调用的是高德地图的创建静态图接口,因此您需要申请高德地图申请 ”Web 服务 API ”密钥(Key)。在高德平台创建一个 Web 服务后,可生成 API Key。
4.X 版本替换方案 A(推荐)
该方案要求 4.X 版本 ≧ 4.1.2.17。
在启动地图插件前,调用 LocationConst.setAMapApiV2Apikey
设置高德地图 API Key。
# LocationConst
// 设置地图ApiKey
public static void setAMapApiV2Apikey(String apikey) {
AMAP_API_V2_APIKEY = apikey;//类似e09af6a2b26c02086e9216bd07c960ae 但此key需要到高德地图申请,e09af6a2b26c02086e9216bd07c960ae 已经失效
}
4.X 版本替换方案 B
如果您使用的 IM SDK 版本 ≦ 4.1.2.17,并且无法升级,可使用方案 B。
继承 ConversationFragment
,重写 onLocationResult
。
# ConversationFragment
@Override
public void onLocationResult(double lat, double lng, String poi, Uri thumb) {
String fix_thumb = 把thumb地址的最后面ApiKey换成自己的;
super.onLocationResult(lat, lng, poi, Uri.parse(fix_thumb));
}
SDK 中地图缩略图地址(thumb)拼接规则如下,您需要把 thumb 地址的最后的 API Key 换成您自行申请的高德地图 API Key。
private String getMapUrl(double latitude, double longitude) {
return "http://restapi.amap.com/v3/staticmap?location=" + longitude + "," + latitude +
"&zoom=16&scale=2&size=408*240&markers=mid,,A:" + longitude + ","
+ latitude + "&key=" + "e09af6a2b26c02086e9216bd07c960ae";
}
5.x 版本修复方案
如果您使用的 IM SDK 版本 ≦ 5.6.7,并且无法升级至 5.6.7 开发版或更新版本,可使用该方案。
该方案本质上是将 SDK 拼接地图缩略图地址(thumb)时使用的过期 API Key 换成您自行申请的高德地图 API Key。
-
首先,请确保您已参考开发者文档集成对应版本的
LocationKit
插件。集成插件时,确保您正确填写了您自行申请的高德地图 API Key。<meta-data android:name="com.amap.api.v2.apikey" android:value="自行申请高德地图的 ApiKey" />
-
自定义 AMap2DAdapter ,继承 AMap2DAdapter(AMap3DAdapter处理方式相同),重写
getMapUrl()
。在该步骤中,将高德地图缩略图地址中最后面的 ApiKey(e09af6a2b26c02086e9216bd07c960ae)替换成您自行申请的高德地图 API Key。# CustomAMap2DAdapter public class CustomAMap2DAdapter extends AMap2DAdapter{ @Override public String getMapUrl(double latitude, double longitude) { return "http://restapi.amap.com/v3/staticmap?location=" + longitude + "," + latitude + "&zoom=16&scale=2&size=408*240&markers=mid,,A:" + longitude + "," + latitude + "&key=" + "e09af6a2b26c02086e9216bd07c960ae"; } }
-
调用
LocationSDKManager.getInstance().setCustomAdapter()
设置自定义的LocationAdapter
# LocationSDKManager public void setCustomAdapter(LocationAdapter<? extends View> customAdapter) { this.customAdapter = customAdapter; }
追踪记录
- 工单号:
- Jira 号:IMSDK-18000
更多支持
如有疑问,欢迎提交工单。