融云IM(一)-----接入

前言

1、融云IM应该说是目前最好自定义和易读取文档的即时通讯第三方SDK了,之前有用过阿里百川IM的,可惜阿里百川不再更新和维护了
2、im千万别选QQ的,如果就普通聊天选择qq那没问题,如果业务需要自定义的果断放弃。融云IM一直在快速的更新和维护。选它就没错了

步骤1:创建应用,导入SDK

创建应用:记得开发环境和生产环境是分开的,开发环境可生成的IM账号是有限的,有时im登录不成功是因为没账号.
导入SDK:强烈推荐以导入 Module 方式引入IMKit,IMLib。方便修改

步骤2:初始化

public class App extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        RongIM.init(this);
    }
}

步骤3:登录IM

从app服务器端获取token,然后调用RongIM.connect(token, new RongIMClient.ConnectCallback())即可
一般调用时机是在首页,看业务也可以在启动界面。
注意

  1. 调用成功一次就好
  2. 服务器获取的token,可以用SP保存下来,因为是长期有效的,不用每次都去获取

示例代码:

public static void connect() {
    if (Utils.isNetworkConnected(MyApplication.getInstance()))
        if (!TextUtils.isEmpty(SPUtils.getToken())) {
            connect(SPUtils.getToken(),null);
        } else {
            //正常只有第一次进入应用会为""
            new BaseIMPresenter().getToken(false, new EmptyTokenListener() {
                @Override
                public void getToken(String token) {
                    connect(token, null);
                }
            });
        }
}

/**
 * <p>连接服务器,在整个应用程序全局,只需要调用一次,需在 {@link #init(Context)} 之后调用。</p>
 * <p>如果调用此接口遇到连接失败,SDK 会自动启动重连机制进行最多10次重连,分别是1, 2, 4, 8, 16, 32, 64, 128, 256, 512秒后。
 * 在这之后如果仍没有连接成功,还会在当检测到设备网络状态变化时再次进行重连。</p>
 *
 * @param token 从服务端获取的用户身份令牌(Token)。
 * @return RongIM  客户端核心类的实例。
 */
private static void connect(String token, final ConnectListener cl) {
    if (BuildConfig.APPLICATION_ID.equals(MyApplication.getCurProcessName(MyApplication.getInstance()))) {
        RongIM.connect(token, new RongIMClient.ConnectCallback() {
            /**
             * Token 错误。可以从下面两点检查
             * 1.  Token 是否过期,如果过期您需要向 App Server 重新请求一个新的 Token
             * 2.  token 对应的 appKey 和工程里设置的 appKey 是否一致
             */
            @Override
            public void onTokenIncorrect() {

                if (null != cl)
                    cl.onTokenIncorrect();
                new BaseIMPresenter().getToken(true, null);
            }

            /**
             * 连接融云成功
             * @param userid 当前 token 对应的用户 id
             */
            @Override
            public void onSuccess(String userid) {

            }

            /**
             * 连接融云失败
             * @param errorCode 错误码,可到官网 查看错误码对应的注释
             */
            @Override
            public void onError(RongIMClient.ErrorCode errorCode) {

            }
        });
    }
}

额外提供IM是否在线的方法

public static boolean isOnline() {
    return RongIM.getInstance().getCurrentConnectionStatus().equals(RongIMClient.ConnectionStatusListener.ConnectionStatus.CONNECTED);
}

步骤4: 会话列表界面

就是用IMKit中的ConversationListFragment,可以认为就是个fragment。正常用就会显示,后期会介绍在这fragment中新增些自定义的会话
注意点:

它是用uri来设置你要显示的类型
如果本身就是显示会话列表界面需要在清单中配置(可参考融云文档)

示例代码:

public Fragment initConversationList() {
    if (mListFragment == null) {
        mListFragment = new ConversationListFragment();

        uri = Uri.parse("rong://" + BuildConfig.APPLICATION_ID).buildUpon()
                .appendPath("conversationlist")
                .appendQueryParameter(Conversation.ConversationType.PRIVATE.getName(), "false")
                .appendQueryParameter(Conversation.ConversationType.SYSTEM.getName(), "false")
                .build();
        mListFragment.setUri(uri);
    }
    return mListFragment;
}

步骤5:会话界面

用的是IMkit中的ConversationFragment。有targetId就能显示,targetId就是对方的IM账号

示例代码:

private void enterFragment(Conversation.ConversationType mConversationType, String toUserIm) {
    fragment = new ConversationFragment();
    uri = Uri.parse("rong://" + BuildConfig.APPLICATION_ID).buildUpon()
            .appendPath("conversation")
            .appendPath(mConversationType.getName().toLowerCase())
            .appendQueryParameter("targetId", toUserIm).build();
    fragment.setUri(uri);
    FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
    //xxx 为你要加载的 id
    transaction.add(R.id.rong_content, fragment);
    transaction.commitAllowingStateLoss();
    showRealView();
}

在 AndroidManifest.xml 中,会话 Activity 下面配置 intent-filter。 注意请修改 android:host 为 App 的 ApplicationId,其他保持不变。

<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="${applicationId}"
 android:pathPrefix="/conversation/"
 android:scheme="rong" />
 </intent-filter>
  </activity>

ApplicationId可以不改,在build.gradle里面配置
manifestPlaceholders = [ APPLICATIONID: applicationId]
启动会话界面
示例代码:

public static void startChattingActivity(Context context, Conversation.ConversationType conversationType, String targetId, String title) {
    if (context != null && !TextUtils.isEmpty(targetId) && conversationType != null) {
        Uri uri = Uri.parse("rong://" + BuildConfig.APPLICATION_ID).buildUpon()
                .appendPath("conversation")
                .appendPath(conversationType.getName().toLowerCase(Locale.US))
                .appendQueryParameter("targetId", targetId)
                .appendQueryParameter("title", title)
             
                .build();
        context.startActivity(new Intent("android.intent.action.VIEW", uri));
    } else {
        throw new IllegalArgumentException();
    }
}

title是用来显示标题的,当然会话界面就需要做获取代码了。

还有混淆啥的,可参考官网

好了,到这里接入IM,并且建立聊天就完成了。有问题可加我QQ:893151960或者群142739277
先说明:解决问题可能收费的,讨论问题免费

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 为了实现实时通讯功能,可以在uniapp项目中接入融云。首先在融云官网注册账号,并创建应用获取appKey和appSecret。随后可以使用uniapp插件市场里的融云插件,或者手动导入融云SDK。 在uniapp项目中引入融云插件或SDK后,可以调用相应的API实现聊天功能。常用的API包括连接服务器、发送消息、接收消息、获取会话列表等。需要注意的是,融云提供了多种类型的消息,包括文字、图片、语音、文件等,需要根据具体需求选择合适的类型。 为了方便开发和维护,可以对融云API进行封装。比如封装发送消息的方法,可以提供一个参数对象,包含消息类型、接收者、发送者、内容等信息,内部调用融云API发送消息。这样可以在应用中简化代码,提高开发效率和程序可维护性。 总之,接入融云是实现实时通讯的有效方法,通过调用融云提供的API实现聊天功能。需要注意选择合适的消息类型,并封装API以方便开发和维护。 ### 回答2: 在UniApp中接入融云,需要进行如下步骤: 1.注册融云账号并创建应用。可以在融云官网进行注册并创建应用,获取AppKey和AppSecret。 2.下载并安装融云SDK。在融云官网下载SDK并按照官方文档进行安装。 3.在UniApp项目中安装uni-app-plugin-im插件。该插件已经完成了对融云SDK的封装,可以便于开发者进行快速开发。安装方法:在终端中运行npm install @dcloudio/uni-app-plugin-im --save命令。 4.在manifest.json文件中添加插件配置。在"uni-app-plugin-im"节点中添加"appKey"和"appSecret"节点并填入相应的信息。 5.在需要使用融云的页面中使用插件提供的API进行开发。例如,可以使用im.createDiscussion()创建讨论组,使用im.sendMessage()发送消息等等。 总之,通过将融云SDK与uni-app-plugin-im插件进行结合,可以使得在UniApp中接入融云变得十分简单快捷,方便开发者快速开发出有IM功能的app。 ### 回答3: Uniapp是基于Vue.js框架的移动端开发框架。融云是一款强大的即时通讯云服务,支持文字、语音、图片、视频等多种形式的消息传递。将Uniapp与融云结合起来,可以实现高效、流畅的即时通讯功能。 首先,我们需要在Uniapp项目中引入融云SDK,并进行初始化。可以在main.js文件中进行如下配置: ```js import RongIM from 'vue-rong-im'; Vue.use(RongIM, { appKey: 'your appKey', }); ``` 其中,appKey是融云提供的用于标识应用程序的唯一标识符,可以在融云开发者平台上获取。 接下来,我们可以在需要使用即时通讯功能的组件中,引入融云的组件并使用其提供的接口进行消息的发送和接收。 ```js <template> <div> <!-- 聊天窗口 --> <rong-im :conversationType="conversationType" :targetId="targetId"></rong-im> <!-- 输入框和发送按钮 --> <div> <input type="text" v-model="message"> <button @click="send">发送</button> </div> </div> </template> <script> import { RongIMClient } from 'rong-im-lib'; export default { data() { return { message: '', conversationType: RongIMClient.ConversationType.PRIVATE, targetId: 'target id', }; }, methods: { send() { // 调用融云SDK的sendMessage方法发送消息 RongIMClient.getInstance().sendMessage( this.conversationType, this.targetId, { content: this.message }, { onSuccess() { console.log('发送成功'); }, onError(error) { console.log('发送失败:', error); }, }, ); }, }, }; </script> ``` 在上述代码中,我们使用了融云提供的vue-rong-im组件作为聊天窗口,同时调用了融云SDK的sendMessage方法发送消息。在发送成功或失败时,可以通过回调函数进行相应的处理。 综上所述,通过在Uniapp中接入融云,我们可以快速实现高效、流畅的即时通讯功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值