融云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", "标题");
阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 科目四试题 樱花四合一 四棱柱 科目四考题 四乌汤 四针缝纫机 一分四音频线 四围 四味汤 领航城四期 四魔头 当归四逆理中汤 阿四 每周工作四小时 四小姐 氧气瓶四防 科目四题型 四弯风 四孔灯 四航局 四道菜 四汤 四股麻花辫 四类反光膜 四股辫的编法 并四交谊舞 四才子 斜四通 国标舞快四 中建四局招聘 范成大四时田园杂兴 四孔口琴怎么吹 贝多芬第四钢琴协奏曲 三位四通电磁换向阀图形符号 二位四通电磁换向阀图形符号 广州四中高中部 四中学校 四中全全召开时间 十九届四中 北京四中 十八届四中开会时间