融云IM集成
来源:互联网 发布:用友t3报表没有数据 编辑:程序博客网 时间:2024/05/18 03:08
首先到融云官方网站下载融云 SDK。融云 SDK 各部分功能以插件化的形式独立提供,开发者可以根据自己的需要,自由组合下载。各组件的功能如下
需要什么功能就导入该功能的组件并与自己的APP进行依赖
在融云开发平台创建应用获取AppKey与token值
将 PushLib 中的 jar 包 和 pushDaemon -> libs 目录下应用所支持平台的 so 拷贝到您应用的 libs 目录下,另外还需要将 pushDaemon -> executable 目录下各平台的可执行文件 push_daemon 拷贝到您应用 Module 的 assets 目录下。如图:
注意 : 放置 so 的文件夹位置需要和您 build.gradle 文件中配置的 jni 目录一致。
将 LocationLib 里的 jar 包拷贝到您应用的 libs 目录下(如果不需要位置功能,可跳过此步骤)。
注意
音视频通话组件 CallLib 仅支持 armeabi-v7a 和 x86 架构 CPU (组件功能),如果您使用了我们的音视频通话功能,注意需要把 IMLib 和 PushLib 组件中其它 CPU 架构的 so 删除。或者您也可以在应用的 build.gradle 文件中增加如下配置来过滤 so :
defaultConfig { applicationId "XXX" ... ndk { abiFilters "armeabi-v7a", "x86" }}
清单配置
打开 IMLib Module 的 AndroidManifest.xml 文件,把 meta-data RONG_CLOUD_APP_KEY 的值修改为您自己的 AppKey.
<meta-data android:name="RONG_CLOUD_APP_KEY" android:value="您的应用 AppKey" />
打开应用的 App Module 的 AndroidManifest.xml 文件, 把从高德官网获取的 AppKey 添加到 meta-data 里 (如果您不使用位置功能,可跳过此步骤)。
<meta-data android:name="com.amap.api.v2.apikey" android:value="高德地图的 AppKey" />
在应用的 App Module 的 AndroidManifest.xml 文件中,添加 FileProvider 相关配置,修改 android:authorities 为 “您的应用的包名称.FileProvider”。
<provider android:name="android.support.v4.content.FileProvider" android:authorities="您的应用包名.FileProvider" android:exported="false" android:grantUriPermissions="true"> <meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/rc_file_path" /></provider>
初始化
在整个应用程序全局,您只需要调用一次 init 方法。对于快速集成,我们建议您在 App 主进程初始化,您只需要实现一句函数,以下为融云 Demo 代码示例:
连接服务器
连接服务器前,确认已通过融云 Server API 接口获取 Token。
调用 connect() 方法连接融云服务器,该方法在整个应用的生命周期里只需要调用一次,且必须在主进程调用。如果连接失败,SDK 会自动启动重连机制,进行最多 10 次重连,分别是 1、2、4、8、16、32、64、128、256、512 秒后。如果仍然没有连接成功,还会在检测网络状态变化时再次重连。您不需要做额外的重连操作。
注意:当应用被杀死后,接受到推送通知,点击通知拉起应用时,此时应用被重新唤起,属于新的生命周期,所以需要再次调用 connect() 方法进行连接。
public class App extends Application { @Override public void onCreate() { super.onCreate(); //初始化 RongIM.init(this); //token值 String token1 ="0h9YxcPk159g+mHCmg8yTe613itBZbH+fdoaDH0vgK9eWNr9PuKeWsc2iWpw4U/inklzA2oqfd/R0h1j0ZpDrA=="; //连接融云 RongIM.connect(token1, new RongIMClient.ConnectCallback() { @Override public void onTokenIncorrect() { } @Override public void onSuccess(String s) { Log.d(TAG, "onTokenIncorrect: "+s); } @Override public void onError(RongIMClient.ErrorCode errorCode) { } }); }}
官方示例
/** * <p>连接服务器,在整个应用程序全局,只需要调用一次,需在 {@link #init(Context)} 之后调用。</p> * <p>如果调用此接口遇到连接失败,SDK 会自动启动重连机制进行最多10次重连,分别是1, 2, 4, 8, 16, 32, 64, 128, 256, 512秒后。 * 在这之后如果仍没有连接成功,还会在当检测到设备网络状态变化时再次进行重连。</p> * * @param token 从服务端获取的用户身份令牌(Token)。 * @param callback 连接回调。 * @return RongIM 客户端核心类的实例。 */private void connect(String token) { if (getApplicationInfo().packageName.equals(App.getCurProcessName(getApplicationContext()))) { RongIM.connect(token, new RongIMClient.ConnectCallback() { /** * Token 错误。可以从下面两点检查 1. Token 是否过期,如果过期您需要向 App Server 重新请求一个新的 Token * 2. token 对应的 appKey 和工程里设置的 appKey 是否一致 */ @Override public void onTokenIncorrect() { } /** * 连接融云成功 * @param userid 当前 token 对应的用户 id */ @Override public void onSuccess(String userid) { Log.d("LoginActivity", "--onSuccess" + userid); startActivity(new Intent(LoginActivity.this, MainActivity.class)); finish(); } /** * 连接融云失败 * @param errorCode 错误码,可到官网 查看错误码对应的注释 */ @Override public void onError(RongIMClient.ErrorCode errorCode) { } }); }}
配置会话列表
新建ConversationListActivity
配置布局文件
这是您的会话列表 Activity 对应的布局文件:conversationlist.xml。注意 android:name 固定为融云的 ConversationListFragment。
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <fragment android:id="@+id/conversationlist" android:name="io.rong.imkit.fragment.ConversationListFragment" android:layout_width="match_parent" android:layout_height="match_parent" /></LinearLayout>
配置 intent-filter:
融云 SDK 是通过隐式调用的方式来实现界面跳转的。因此您需要在 AndroidManifest.xml 中,您的会话列表 Activity 下面配置 intent-filter,其中,android:host 是您应用的包名,需要手动修改,其他请保持不变。
<!--会话列表--><activity android:name="io.rong.fast.activity.ConversationListActivity" android:screenOrientation="portrait" android:windowSoftInputMode="stateHidden|adjustResize"> <intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <data android:host="io.rong.fast" android:pathPrefix="/conversationlist" android:scheme="rong" /> </intent-filter></activity>
配置会话界面
会话 Fragment 跟会话列表是完全一致的,您可以用同样的方式快速的配置好。
配置布局文件
这是您的会话 Activity 对应的布局文件 conversation.xml,注意 android:name 固定为融云的 ConversationFragment。
新建ConversationActivity
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <fragment android:id="@+id/conversation" android:name="io.rong.imkit.fragment.ConversationFragment" android:layout_width="match_parent" android:layout_height="match_parent" /></LinearLayout>
<!--会话界面--> <activity android:name="io.rong.fast.activity.ConversationActivity" android:screenOrientation="portrait" android:windowSoftInputMode="stateHidden|adjustResize"> <intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <data android:host="io.rong.fast" android:pathPrefix="/conversation/" android:scheme="rong" /> </intent-filter> </activity>
*注:在按钮点击事件下可通过调用 RongIM.getInstance().startConversationList(); 去唤起会话列表
*
其他的按需求自己配置本文先配置这两个进行演示
在按钮点击事件下可通过调用
/** * 启动单聊界面。 * * @param context 应用上下文。 * @param targetUserId 要与之聊天的用户 Id。 * @param title 聊天的标题,开发者需要在聊天界面通过 intent.getData().getQueryParameter("title") * 获取该值, 再手动设置为聊天界面的标题。 */RongIM.getInstance().startPrivateChat(getActivity(), "9527", "标题");