這里寫自定義目錄標題
- 關于融云的單聊通訊那點事
- 用了兩天兩夜做出的是最簡單的事
- how (怎么實作)
- 1.合理[借助融云官方檔案](https://docs.rongcloud.cn/v4/views/im/ui/guide/private/intro/private.html)
- 2.初始化相關資訊
- 在activity中呼叫application實作初始化
- 實作初始化后我們就可以實作相關函式的呼叫
- 怎么套用?
- 實作融云提供給的訊息接收與發送功能
- 以上就是我個人對整個專案的開發(談不上專案,比較low)但是還是實作了基本的通訊
關于融云的單聊通訊那點事
最近剛學Android基礎知識,覺得必須得做點什么能用的東西,然后想到了去做一個小的通訊APP,于是我查閱了很多blog,最終鎖定了融云
用了兩天兩夜做出的是最簡單的事
下面是實體圖

然后是專案的結構

how (怎么實作)
1.合理借助融云官方檔案
怎么個合理法
1.一定要看清開發環境
不然你無法集成它給你的sdk
2.只能使用遠程maven集成(融云現在通訊功能下我是沒有找到SDK檔案的,它給你的連接是個demo沒有它給你的檔案所以只能使用maven集成)
3.集成代碼

直接去按官方開發檔案即可
2.初始化相關資訊
官方推薦的是在application中初始化相關資訊,實際上去哪都還可以!

import android.app.Application;
public class MyApplication extends Application {
public String getAppKey() {
return appKey;
}
public void setAppKey(String appKey) {
this.appKey = appKey;
}
private String appKey;
public String getToken() {
return token;
}
public void setToken(String token) {
this.token = token;
}
private String token;
@Override
public void onCreate() {
super.onCreate();
}
}
這是我在Application中寫的代碼,用來初始化資訊而已,由于我沒有去實作多次獲取token,所以我是去官方API中呼叫的api函式直接獲取然后寫死的(不建議這樣做)
在activity中呼叫application實作初始化
package com.example.justtalkwithme;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.widget.Toast;
import io.rong.imkit.RongIM;
import io.rong.imlib.RongIMClient;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 初始化. 建議在 Application 中進行初始化.
MyApplication application=new MyApplication();
application.setAppKey("官方key");
RongIM.init(this, application.getAppKey());
application.setToken("官方token需要自己獲取的");
RongIM.connect(application.getToken(), new RongIMClient.ConnectCallback() {
@Override
public void onDatabaseOpened(RongIMClient.DatabaseOpenStatus code) {
//訊息資料庫打開,可以進入到主頁面
}
@Override
public void onSuccess(String s) {
//連接成功
Toast.makeText(MainActivity.this,"連接成功",Toast.LENGTH_LONG).show();
Intent intent=new Intent(MainActivity.this, ConversationActivity.class);
startActivity(intent);
}
@Override
public void one rror(RongIMClient.ConnectionErrorCode errorCode) {
if(errorCode.equals(RongIMClient.ConnectionErrorCode.RC_CONN_TOKEN_INCORRECT)) {
//從 APP 服務獲取新 token,并重連
} else {
//無法連接 IM 服務器,請根據相應的錯誤碼作出對應處理
Toast.makeText(MainActivity.this,"連接失敗",Toast.LENGTH_LONG).show();
}
}
});
}
}
實作初始化后我們就可以實作相關函式的呼叫
由于我一直沒搞明白怎么去呼叫融云官方UI組件所以我就去各種blog中找了一個類似QQ的聊天UI組件(此處轉載一個大佬的的文章)
著作權宣告:本文為博主原創文章,遵循 CC 4.0 BY-SA 著作權協議,轉載請附上原文出處鏈接和本宣告,
本文鏈接:https://blog.csdn.net/eastmoon502136/article/details/50650350
我就是直接套用了他的UI組件
怎么套用?
首先在他的blog中獲取原始碼,然后偷天換日
1.復制他所有的drawable中的圖片到自己的drawable中
2.復制他所有的layout布局到自己的layout中
3.復制他所有的除Mainactivity.java的java檔案到自己的專案中(建議用先用Android studio打開他的專案然后Ctrl +C 和Ctrl +V)這樣Android會自動修改默認包避免出錯
4.新建一個ConversitionActivity類然后將他的Mainactivity套用到自己的這個新建類中以便于我的Mainactivity在連接成功后能實作跳轉
(實作跳轉必須得到mainifest.xml中注冊活動)
以下是我的那個xml檔案,你自己不可直接復制,需要修改包名
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.justtalkwithme">
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="MediaStore.Images.Media.INTERNAL_CONTENT_URI"/>
<uses-permission android:name="MediaStore.Images.Media.EXTERNAL_CONTENT_URI"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<application
android:allowBackup="true"
android:name=".MyApplication"
android:icon="@drawable/yi"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
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=".ConversationActivity">
</activity>
</application>
</manifest>
實作融云提供給的訊息接收與發送功能
官方檔案明確指出回應的函式

將該函式插入到UI主件中的自己編好的ConversationActivity類中

訊息發送已經實作此處已經完成我做的專案的99/100了
還剩一個訊息接收
因為我比較趕時間就沒有去設定什么特別的訊息接收處理,默認的也是開發檔案的自動接收,但是訊息的接收主要分兩步(個人看法)
1.監聽,官方開發檔案已經給出
2.完成監聽后對接收到的訊息的處理(我比較懶只設定了對實時訊息的處理)
代碼(實作了收發訊息)
Conversation.ConversationType conversationType = Conversation.ConversationType.PRIVATE;
String targetId = "**自己在api中設定好的*";
messagex = content_send;
TextMessage messageContent = TextMessage.obtain(messagex);
Message message = Message.obtain(targetId, conversationType, messageContent);
RongIM.getInstance().sendMessage(message, null, null, new IRongCallback.ISendMessageCallback() {
/**
* 訊息發送前回呼, 回呼時訊息已存盤資料庫
* @param message 已存庫的訊息體
*/
@Override
public void onAttached(Message message) {
Toast.makeText(ConversationActivity.this, "訊息已儲存到資料庫", Toast.LENGTH_LONG).show();
}
/**
* 訊息發送成功,
* @param message 發送成功后的訊息體
*/
@Override
public void onSuccess(Message message) {
Toast.makeText(ConversationActivity.this, "訊息發送成功", Toast.LENGTH_LONG).show();
}
/**
* 訊息發送失敗
* @param message 發送失敗的訊息體
* @param errorCode 具體的錯誤
*/
@Override
public void one rror(Message message, RongIMClient.ErrorCode errorCode) {
Toast.makeText(ConversationActivity.this, "訊息發送失敗", Toast.LENGTH_LONG).show();
}
});
}
}
});
RongIM.setConnectionStatusListener(new RongIMClient.ConnectionStatusListener() {
/**
* 連接狀態回傳回呼
* @param status 狀態值
*/
@Override
public void onChanged(ConnectionStatus status) {
Toast.makeText(ConversationActivity.this, status.getMessage(), Toast.LENGTH_LONG).show();
}
});
RongIM.setOnReceiveMessageListener(new RongIMClient.OnReceiveMessageWrapperListener() {
/**
* 接收實時或者離線訊息,
* 注意:
* 1. 針對接收離線訊息時,服務端會將 200 條訊息打成一個包發到客戶端,客戶端對這包資料進行決議,
* 2. hasPackage 標識是否還有剩余的訊息包,left 標識這包訊息決議完逐條拋送給 App 層后,剩余多少條,
* 如何判斷離線訊息收完:
* 1. hasPackage 和 left 都為 0;
* 2. hasPackage 為 0 標識當前正在接收最后一包(200條)訊息,left 為 0 標識最后一包的最后一條訊息也已接收完畢,
*
* @param message 接收到的訊息物件
* @param left 每個資料包資料逐條上拋后,還剩余的條數
* @param hasPackage 是否在服務端還存在未下發的訊息包
* @param offline 訊息是否離線訊息
* @return 是否處理訊息, 如果 App 處理了此訊息,回傳 true; 否則回傳 false 由 SDK 處理,
*/
@Override
public boolean onReceived(final Message message, final int left, boolean hasPackage, boolean offline) {
Toast.makeText(ConversationActivity.this, "正在接受訊息", Toast.LENGTH_LONG).show();
rongMsg = (TextMessage) message.getContent();
message_receive =rongMsg.getContent();
Msg msg_receive = new Msg(message_receive, Msg.TYPE_RECEIVED);
msgList.add(msg_receive);
return true;
}
});
以上就是我個人對整個專案的開發(談不上專案,比較low)但是還是實作了基本的通訊
使用原始碼的時候不要直接open整個專案而應該復制APP中的main檔案把自己新建的專案中的main檔案替換
原始碼下載
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/210055.html
標籤:java
