初始化
更新时间: 2024/07/26 13:39:23
在使用 IM UIKit 功能前,必须先对其进行初始化,但不需要对 NIM SDK 单独初始化。
IM UIKit 的核心类IMKitClient
,提供初始化、登录、获取当前账号信息等能力。
前提条件
-
已完成组件导入。
-
已注册云信 IM 账号,获取 accid 和 token。
-
如果需要实现地理位置消息功能(基于高德地图),还需确保已在
AndroidManifest.xml
为您的应用配置:高德地图 API Key 和 定位服务(APSService)
xml
<!-- 高德地图定位 --> //在您的applicaion节点中配置 apiKey和APSService <application android:name=".IMApplication"> <meta-data android:name="com.amap.api.v2.apikey" android:value="apikey" /> // 传入您的高德地图 API Key <service android:name="com.amap.api.location.APSService" /> </application>
高德地图 API Key 的具体获取方式,参见高德开放平台文档。
注意事项
由于 IM UIKit 的初始化与登录是通过底层调用 NIM SDK 接口来实现的,因此重复调用 IM UIKit 和 NIM SDK 的初始化与登录接口会相互覆盖传入的信息(包括推送配置信息)。
所以若用户同时集成 IM UIKit 和 NIM SDK,只需要调用一次初始化与登录接口即可。
实现初始化
初始化(简化方式)
IM UIKit 的初始化,最简单的实现方式为:在应用启动时,调用IMKitClient.init
方法。
初始化必须在应用的生命周期内进行,且只可进行一次。
-
方法原型
java
IMKitClient.init(Context context,LoginInfo info,SDKOptions options)
-
参数说明
参数类型说明 context Context 应用上下文 info LoginInfo
需要传入 IM 账号(即 accid
) 和token
,同时可设置登录鉴权模式options SDKOptions
SDK 的配置信息。
其中 App Key 必须传入。如果您的应用主要服务于海外用户,需要配置私有化服务器地址中的 LBS 和 link 域名相关信息,具体参见配置 LBS 和 Link 域名 -
示例代码
java
public class IMApplication extends MultiDexApplication { private static final String TAG = "IMApplication"; @Override public void onCreate() { SDKOptions options = new SDKOptions(); options.appKey = "App Key"; LoginInfo loginInfo = LoginInfo.LoginInfoBuilder.loginInfoDefault("id","token").build(); IMKitClient.init(this,loginInfo,options); //如果使用地图消息组件locationkit,则需要初始化该组件 if (NIMUtil.isMainProcess(this)) { // 地图组件初始化 LocationConfig locationConfig = new LocationConfig(); // 高德地图web API KEY,用于位置消息生成图片(高德提供服务,需要用户自己创建web服务 // 位置消息展示方案,参考高德静态地图文档,文档地图如下 locationConfig.aMapWebServerKey = "web api key"; LocationKitClient.init(this, locationConfig); } } }
初始化最佳实践
用户首次打开应用,需要接受应用的隐私协议,以保证业务隐私合规。因此建议在用户接受隐私协议之后再进行初始化。
参考流程如下:
-
在 Application 中进行初始化和隐私协议判断。
java
public class IMApplication extends MultiDexApplication { @Override public void onCreate() { //获取用户是否同意隐私协议,getPrivacyStatus()需要自己实现,在用户同意的时候本地保存,然后这里进行读取。 bool agreePrivacy = getPrivacyStatus(); SDKOptions options = new SDKOptions(); //填入App Key options.appKey = "App Key"; //如果有account和token信息可以填入登录信息直接进行登录 LoginInfo loginInfo = LoginInfo.LoginInfoBuilder.loginInfoDefault("account","token").build(); if(agreePrivacy){ IMKitClient.init(this,loginInfo,options); }else { //采用config方式,仅仅是配置,不影响性能 IMKitClient.config(this,loginInfo,options); } } }
-
如果用户没有同意隐私协议,则自行实现相关页面跳转逻辑和目标页面,例如跳转到隐私协议授权页面
PrivacyActivity
。java
public class PrivacyActivity extends Activity { private void agreePrivacy(){ //当用户同意隐私协议,则调用初始化接口 IMKitClient.initSDK(); } }
上述示例代码中
PrivacyActivity
和agreePrivacy()
仅为示例名称,相应的逻辑需要开发者自行实现。
后续步骤
为保障通信安全,如果您在调试环境中的使用的是云信控制台生成的 IM 账号(测试用),请确保在后续的正式生产环境中,将其替换为通过 IM 服务端 API 生成的正式 IM 账号。