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