2.1、会话列表:
@Override
public void initView() {
// 融云的权限相关
// RongYPermission.requestEasePermission(this);
// 加入自定义会话列表
FragmentManager fragmentManager = getSupportFragmentManager();
fragmentManager.beginTransaction()
.add(R.id.fragment_container, initConversationList())
.commit();
}
/**
* 自定义会话列表
* @return
*/
private Fragment initConversationList() {
ConversationListFragment listFragment = new ConversationListFragment();
listFragment.setAdapter(new ConversationListAdapter(RongContext.getInstance()));
Uri uri = Uri.parse("rong://" + getApplicationInfo().packageName).buildUpon()
.appendPath("conversationlist")
//设置私聊会话是否聚合显示
.appendQueryParameter(Conversation.ConversationType.PRIVATE.getName(), "false")
//系统
// .appendQueryParameter(Conversation.ConversationType.SYSTEM.getName(), "true")
.build();
listFragment.setUri(uri);
return listFragment;
}
/**
* 启动会话界面
*/
RongIM.getInstance().startPrivateChat(Context context, String targetUserId, String title);
2.2、会话页面:
只需要配置布局文件即可
<?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>
AndroidManifest.xml文件下注册:
注意:android:host 为您应用的包名
<!--会话列表-->
<activity
android:name=".XXActivity"
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="应用包名"
android:pathPrefix="/conversationlist"
android:scheme="rong" />
</intent-filter>
</activity>
<!--会话界面-->
<activity
android:name=".XXActivity"
android:screenOrientation="portrait"
android:launchMode="singleTask"
android:windowSoftInputMode="stateHidden|adjustResize">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<data
android:host="应用包名"
android:pathPrefix="/conversation/"
android:scheme="rong" />
</intent-filter>
</activity>
2.3、监听消息个数
先继承IUnReadMessageObserver,在分别注册和反注册
@Override
protected void onResume() {
super.onResume();
RongIM.getInstance().addUnReadMessageCountChangedObserver(this,
Conversation.ConversationType.PRIVATE);
}
@Override
protected void onStop() {
super.onStop();
RongIM.getInstance().removeUnReadMessageCountChangedObserver(this);
}
2.4、高德地图使用注意**
注意:项目中已经继承的高德地图要换成融云的,版本最好也不要更改,不然用融云继承好的地图模块会有问题。
2.5、添加好友与删除好友
添加好友与删除好友这块是由我们自己来维护的,A删除好友B,A应用里和B相关的信息立即删除,但是B可能不能立即收到这个被删除的通知,在会话列表界面还要相关记录,可以继续和A聊天,这样没法实现真正的删除啊。于是我想出A删除好友B后,直接拉入黑名单的小点子。这样,B那边有A的相关记录,也无法发送信息给A了。当然这些都是交给后台来做啦,虽然前台也能做,因为交给后台来做性价比更高。
可以修改IMKit中string资源文件下的
<!--<string name="rc_rejected_by_blacklist_prompt">您的消息已经发出,但被对方拒收</string>-->
<string name="rc_rejected_by_blacklist_prompt">消息发送失败,你还不是对方好友</string>
2.6、打包问题
混淆代码
# RongCloud SDK
-keepattributes Exceptions,InnerClasses
-keepattributes Signature
-keep class io.rong.** {*;}
-keep class * implements io.rong.imlib.model.MessageContent {*;}
-dontwarn io.rong.push.**
-dontnote com.xiaomi.**
-dontnote com.google.android.gms.gcm.**
-dontnote io.rong.**
# VoIP
-keep class io.agora.rtc.** {*;}
# Location
-keep class com.amap.api.**{*;}
-keep class com.amap.api.services.**{*;}
# 红包
-keep class com.google.gson.** { *; }
-keep class com.uuhelper.Application.** {*;}
-keep class net.sourceforge.zbar.** { *; }
-keep class com.google.android.gms.** { *; }
-keep class com.alipay.** {*;}
-keep class com.jrmf360.rylib.** {*;}
-ignorewarnings
# Location
-keep class com.amap.api.**{*;}
-keep class com.amap.api.services.**{*;}
#要成自己项目接受器的路径
-keep class com.eeesys.dtwjw_patient.rongyun.NotificationReceiver {*;}
注意:签名方式,单设置v2签名打包没有问题,但是融云部分功能无法使用,比如消息无法发送。
v1SigningEnabled true
v2SigningEnabled true