极光JMessage:IM即时通信集成群聊简单实现(无需自己搞后台和数据库)

一、注册极光账号,创建应用

网址:首页 - 极光

二、集成sdk:

1、项目的build.gradle添加mavenCentral():

buildscript {
    repositories {
        ...
        mavenCentral()
    }
    ...
}

allprojects {
    repositories {
        ...
        mavenCentral()
    }
}

2、app的build.gradle添加依赖:

dependencies {
    ...
    implementation 'cn.jiguang.sdk:jmessage:2.9.2'  // 此处以JMessage 2.9.2 版本为例。
    implementation 'cn.jiguang.sdk:jcore:2.3.0'  // 此处以JCore 2.3.0 版本为例。
}

还要声明ndk还有你极光平台上创建的应用的key:

android {
    ...
    defaultConfig {
        applicationId "您自己的包名"
        ...
        ndk {
            //选择要添加的对应 cpu 类型的 .so 库。
            abiFilters 'armeabi', 'armeabi-v7a', 'arm64-v8a'
            // 还可以添加 'x86', 'x86_64', 'mips', 'mips64'
        }

        manifestPlaceholders = [
                JPUSH_PKGNAME : applicationId,
                JPUSH_APPKEY : "创建应用那里的AppKey", //JPush 上注册的包名对应的 Appkey.
                JPUSH_CHANNEL : "developer-default", //暂时填写默认值即可.
        ]
    }

三、项目前期声明工作:

1、AndroidManifest.xml声明必现的权限,缺少的话会报错:

<uses-permission android:name="您自己的包名.permission.JPUSH_MESSAGE" />
<uses-permission android:name="android.permission.RECEIVE_USER_PRESENT" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"
    tools:ignore="ProtectedPermissions" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.WRITE_SETTINGS"
    tools:ignore="ProtectedPermissions" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />

2、需要声明一个服务,这个服务继承JCommonService,服务里面什么都不需要写:

import cn.jpush.android.service.JCommonService;
public class MyJService extends JCommonService {
}

AndroidManifest.xml:

<!-- Since JCore2.0.0 Required SDK核心功能-->
<!-- 可配置android:process参数将Service放在其他进程中;android:enabled属性不能是false -->
<!-- 这个是自定义Service,要继承极光JCommonService,可以在更多手机平台上使得推送通道保持的更稳定 -->
<service android:name=".MyJService"
    android:enabled="true"
    android:exported="false"
    android:process=":pushcore">
    <intent-filter>
        <action android:name="cn.jiguang.user.service.action" />
    </intent-filter>
</service>

四、开始代码的实现:

1、Application中初始化JMessage:

import android.app.Application;
import cn.jpush.im.android.api.JMessageClient;

public class MyApp extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        JMessageClient.setDebugMode(true);
        JMessageClient.init(this);
    }
}

别忘了在AndroidManifest.xml里面声明这个Application:

<application
    android:name=".MyApp"
    ...
    >
</application>

2、注册账号:(也可以在极光平台管理)

JMessageClient.register(账号字符串, 密码字符串, new BasicCallback() {
    @Override
    public void gotResult(int i, String s) {
        //i == 0则是成功,否则就是失败,失败原因是s
    }
});

3、登录账号:

JMessageClient.login(账号字符串, 密码字符串, new BasicCallback() {
    @Override
    public void gotResult(int i, String s) {
        if(i == 0){
            //登录成功,跳转到聊天列表界面
        }else {
            showToast("登录失败:"+s);
        }
    }
});

4、获取登录信息(可以用于判断是否登录了,如果获取到是null则没有登录):

JMessageClient.getMyInfo();

5、退出登录:

JMessageClient.logout();

6、发送群聊的文本消息:

/**
 * 创建一条群聊文本信息,此方法是创建message的快捷接口,对于不需要关注会话实例的开发者可以使用此方法
 * 快捷的创建一条消息。其他的情况下推荐使用{@link Conversation#createSendMessage(MessageContent)}
 * 接口来创建消息
 *
 * @param groupID 群组的groupID
 * @param text    文本内容
 * @return 消息对象
 */
Message message = JMessageClient.createGroupTextMessage(groupId, text);
addMessage(message);//上屏,把发送的信息显示到UI列表上面,方法自己实现
message.setOnSendCompleteCallback(new BasicCallback() {
    @Override
    public void gotResult(int responseCode, String responseDesc) {
        if (responseCode == 0) {
            //消息发送成功
            showToast("消息发送成功");
            //清空输入框
            etMsg.setText("");
        } else {
            //消息发送失败
            showToast("消息发送失败");
            //todo 失败的其他处理,比如显示小红感叹号
        }
    }
});
JMessageClient.sendMessage(message);

7、接收消息:

//声明一个接收消息的内部类,里面有俩方法,一个在线接收消息,一个离线接收消息
private class RegisterEventReceiver{
    public void onEvent(MessageEvent event){
        //do your own business
        Message newMessage = event.getMessage();//获取此次离线期间会话收到的新消息列表
        Log.i(TAG, "onEvent: "+newMessage.toJson());
        recycler.post(()->{
            adapter.addMessages(newMessage);
            recycler.scrollToPosition(adapter.getItemCount()-1);
        });

    }
    public void onEvent(OfflineMessageEvent event){
        //do your own business
        List<Message> newMessages = event.getOfflineMessageList();//获取此次离线期间会话收到的新消息列表
        recycler.post(()->{
            adapter.addMessages(newMessages);
            recycler.scrollToPosition(adapter.getItemCount()-1);
        });
        for (Message newMessage : newMessages) {
            Log.i(TAG, "离线消息:"+newMessage.toJson());
        }
    }
}

private RegisterEventReceiver receiver;
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_chat);

    receiver = new RegisterEventReceiver();
    //注册接收者
    JMessageClient.registerEventReceiver(receiver);
}

@Override
protected void onDestroy() {
    super.onDestroy();
    //解注册
    JMessageClient.unRegisterEventReceiver(receiver);
}

其他具体参考:

极光IM - IM 集成指南 - 极光文档


猜你喜欢

转载自blog.csdn.net/qq_35584878/article/details/122058848