Android中如何集成融云SDK单聊
Posted 请叫我章鱼哥
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android中如何集成融云SDK单聊相关的知识,希望对你有一定的参考价值。
1. 首先依赖下载的工程→Rong_Cloud_android_IMKit_SDK_v2_7_0_dev,依赖工程中需要修改AndroidManifest.xml,把RONG_CLOUD_APP_KEY换成我们自己申请应用的AppKey。2.在应用程序主入口加入一下代码
在主MainActivity中,加入以下代码(这一快需要注意的是启动会话界面中Userid,Usertitle)package com.bwie.test.rongyu; import android.app.ActivityManager; import android.app.Application; import android.content.Context; import io.rong.imkit.RongIM; /** * Created by lenovo on 2016/8/22. */ public class App extends Application @Override public void onCreate() super.onCreate(); /** * OnCreate 会被多个进程重入,这段保护代码,确保只有您需要使用 RongIM 的进程和 Push 进程执行了 init。 * io.rong.push 为融云 push 进程名称,不可修改。 */ if (getApplicationInfo().packageName.equals(getCurProcessName(getApplicationContext())) || "io.rong.push".equals(getCurProcessName(getApplicationContext()))) /** * IMKit SDK调用第一步 初始化 */ RongIM.init(this); /** * 获得当前进程的名字 * * @param context * @return 进程号 */ public static String getCurProcessName(Context context) int pid = android.os.Process.myPid(); ActivityManager activityManager = (ActivityManager) context .getSystemService(Context.ACTIVITY_SERVICE); for (ActivityManager.RunningAppProcessInfo appProcess : activityManager .getRunningAppProcesses()) if (appProcess.pid == pid) return appProcess.processName; return null;
在会话列表中<pre name="code" class="java">package com.bwie.test.rongyu; import android.content.Intent; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import android.view.Menu; import android.view.MenuItem; import io.rong.imkit.RongIM; import io.rong.imlib.RongIMClient; import io.rong.imlib.model.Conversation; public class MainActivity extends AppCompatActivity @Override protected void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); String token="owk23zwVfr2x8YG4BUkyoFstiWBEn/V5QzmSXISTmQ//sAl2Oo2E5OyI6Kn9TAKIo2uMLF18p45UERgUG7vxQg=="; connect(token); @Override public boolean onCreateOptionsMenu(Menu menu) // getMenuInflater().inflate(R.menu.menu_main, menu); return true; @Override public boolean onOptionsItemSelected(MenuItem item) //启动会话界面 if (RongIM.getInstance() != null) RongIM.getInstance().startPrivateChat(this, "1234", ""); //启动会话列表界面 if (RongIM.getInstance() != null) RongIM.getInstance().startConversationList(this); //启动聚合会话列表界面 if (RongIM.getInstance() != null) RongIM.getInstance().startSubConversationList(this, Conversation.ConversationType.GROUP); return super.onOptionsItemSelected(item); /** * 建立与融云服务器的连接 * * @param token */ private void connect(String token) if (getApplicationInfo().packageName.equals(App.getCurProcessName(getApplicationContext()))) /** * IMKit SDK调用第二步,建立与服务器的连接 */ RongIM.connect(token, new RongIMClient.ConnectCallback() /** * Token 错误,在线上环境下主要是因为 Token 已经过期,您需要向 App Server 重新请求一个新的 Token */ @Override public void onTokenIncorrect() Log.d("wtt", "--onTokenIncorrect"); /** * 连接融云成功 * @param userid 当前 token */ @Override public void onSuccess(String userid) Log.d("wtt", "--onSuccess" + userid); startActivity(new Intent(MainActivity.this, HuiHuaListActivity.class)); finish(); /** * 连接融云失败 * @param errorCode 错误码,可到官网 查看错误码对应的注释 */ @Override public void onError(RongIMClient.ErrorCode errorCode) Log.d("wtt", "--onError" + errorCode); );
在会话界面中<pre name="code" class="java"><pre name="code" class="java">package com.bwie.test.rongyu; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; public class HuiHuaListActivity extends AppCompatActivity @Override protected void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState); setContentView(R.layout.activity_hui_hua_list);
<span style="font-size:10px;"></span><pre name="code" class="java">package com.bwie.test.rongyu;
import android.support.v7.app.ActionBarActivity;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import io.rong.imlib.model.Conversation;
public class HuihuaActivity extends ActionBarActivity
/**
* 目标 Id
*/
private String mTargetId;
/**
* 刚刚创建完讨论组后获得讨论组的id 为targetIds,需要根据 为targetIds 获取 targetId
*/
private String mTargetIds;
/**
* 会话类型
*/
private Conversation.ConversationType mConversationType;
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_huihua);
</pre><p></p><span style="font-size:18px"><span style="background-color:rgb(255,255,255)">在activity_hui_hua_list.xml</span></span><pre code_snippet_id="1846632" snippet_file_name="blog_20160823_5_1736883" name="code" class="java"><?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.bwie.test.rongyu.HuiHuaListActivity">
<fragment
android:id="@+id/conversationlist"
android:name="io.rong.imkit.fragment.ConversationListFragment"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</RelativeLayout>
</pre><pre code_snippet_id="1846632" snippet_file_name="blog_20160823_6_9021666" name="code" class="java"><span style="font-size:24px;"><strong>在activity_huihua.xml中</strong></span>
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.bwie.test.rongyu.HuihuaActivity">
<fragment
android:id="@+id/conversation"
android:name="io.rong.imkit.fragment.ConversationFragment"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</RelativeLayout>
在清单文件中(这在Data——>host记住要修改自己的Host,否则会报错,说找不到隐士跳转的对象)
<pre name="code" class="java"><?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.bwie.test.rongyu">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:name=".App"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<!--<activity android:name=".HuihuaActivity" />-->
<!-- 会话列表 -->
<activity
android:name=".HuiHuaListActivity"
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="com.bwie.test.rongyu"
android:pathPrefix="/conversationlist"
android:scheme="rong" />
</intent-filter>
</activity>
<!--会话界面-->
<activity
android:name=".HuihuaActivity"
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="com.bwie.test.rongyu"
android:pathPrefix="/conversation/"
android:scheme="rong" />
</intent-filter>
</activity>
</application>
</manifest>
以上就是简单集成。如果需要实现两个人在手机上安装同一个AppKey的应用,只需要修改一下API上的Token就OK了!以下就是官网的说明。
- userId : 每一个用户对应一个 userId,这个 userId 是您维护的,所以您可以直接赋值,两个您的的用户通信,对于融云来说就是两个 userId 间通讯。
以上是关于Android中如何集成融云SDK单聊的主要内容,如果未能解决你的问题,请参考以下文章
融云即时通讯SDK集成 -- FCM推送集成指南(Android平台)
融云即时通讯SDK集成 -- 国内厂商推送集成踩坑篇(Android平台)
gradle方式集成融云sdk dlopen failed: library "libsqlite.so" not found