极光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 {@Overridepublic void onCreate() {super.onCreate();JMessageClient.setDebugMode(true);JMessageClient.init(this);}
}
别忘了在AndroidManifest.xml里面声明这个Application:
<applicationandroid:name=".MyApp"...>
</application>
2、注册账号:(也可以在极光平台管理)
JMessageClient.register(账号字符串, 密码字符串, new BasicCallback() {@Overridepublic void gotResult(int i, String s) {//i == 0则是成功,否则就是失败,失败原因是s}
});
3、登录账号:
JMessageClient.login(账号字符串, 密码字符串, new BasicCallback() {@Overridepublic 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() {@Overridepublic 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 businessMessage 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 businessList<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 集成指南 - 极光文档
极光JMessage:IM即时通信集成群聊简单实现(无需自己搞后台和数据库)相关推荐
- 环信3即时通信——web端sdk简单集成(一)(文本消息)
环信3即时通信--web端sdk简单集成 实现简单的登录/文字发送/获取好友列表/接收文字消息,(本文章只为简单未使用vuex,消息记录保存在本地localstorage里面) 一.安装sdk npm ...
- 基于Android的聊天软件,Socket即时通信,实现用户在线聊天
基于Android的聊天软件,Socket即时通信,单聊,聊天室,可自行扩展功能,完善细节. [实例功能] 1.运行程序,登录界面, 注册账号功能 2.进入主界面,有通讯录, 个人信息. 3.点击好友 ...
- 非官方即时通信 IM,支持腾讯IM,环信IM,极光IM,融云IM,网易云信IM等
非官方即时通信SDK easy-im 非官方即时通信SDK,支持腾讯IM,环信IM,极光IM,融云IM,网易云信IM等 安装 composer require openphp/easy-im 请求日志 ...
- 环信是否支持html,VUE项目集成环信WebIM即时通信以及所遇到的问题
功能背景: 以前和朋友一块儿作了一个wbe项目集成环信的即时通讯的功能,作的时候感叹web端文档太少,并且npm包有一些坑,记录下来写了这篇博客,以后不断有人加我微信问我,怎么集成.如今我再来重写一下 ...
- android-使用环信SDK开发即时通信功能及源码下载
最近项目中集成即时聊天功能,挑来拣去,最终选择环信SDK来进行开发,选择环信的主要原因是接口方便.简洁,说明文档清晰易懂.文档有android.ios.和后台服务器端,还是非常全的. 环信官网:htt ...
- 即时通信是机遇也是挑战
2019独角兽企业重金招聘Python工程师标准>>> 即时通信给运营商带来哪些挑战? 即时通信将分流运营商的传统业务 即时通信软件不仅与运营商提供的短信.语音一样,可以实现 ...
- iOS开发之使用XMPPFramework实现即时通信(二)
上篇的博客iOS开发之使用XMPPFramework实现即时通信(一)只是本篇的引子,本篇博客就给之前的微信加上即时通讯的功能,主要是对XMPPFramework的使用.本篇博客中用到了Spark做测 ...
- WebSocket 实现 Web 端即时通信
点击上方 好好学java ,选择 星标 公众号 重磅资讯.干货,第一时间送达 今日推荐:牛人 20000 字的 Spring Cloud 总结,太硬核了~ 前言 WebSocket 是HTML5开始提 ...
- [C# 网络编程系列]专题九:实现类似QQ的即时通信程序
引言: 前面专题中介绍了UDP.TCP和P2P编程,并且通过一些小的示例来让大家更好的理解它们的工作原理以及怎样.Net类库去实现它们的.为了让大家更好的理解我们平常中常见的软件QQ的工作原理,所以在 ...
最新文章
- linux 系统中用root切换到普通用户时显示的异常如-bash-4.1$
- Zabbix的snmp监控
- 大咖分享会 | 百度首次揭秘如何构建用户画像与移动统计
- ES5 getter setter
- java(14) - HashMap类
- XML文件解析 --------------------笔记
- mysql使用GROUP BY分组实现取前N条记录的方法或最近几条消费记录
- 路由器刷固件——斐讯路由器FIR300M刷OpenWrt固件教程
- FFmpeg 的AVCodecContext结构体详解
- Lae程序员小漫画(1),仅供一乐
- Dev c++ 怎么设置背景色
- 十大城市加速崛起,数字化创新驱动特点明显
- win10 开机软件自动启动设置
- 关于BatchNorm的理解与讨论
- 青云、UCloud、阿里云、腾讯云等分别都有哪些特点?
- 验证JDK是否安装成功
- 百度云主机使用WordPress建站ideashare.club过程总结与那些坑
- 青楼残梦-第一次被投诉后感
- 为什么会有高防CDN的出现?
- 数据库中用户登录注册用户信息表怎么设计如何设计
热门文章
- MIL边缘检查实战1.0 20220303
- 亲历H5移动端游戏微信支付接入及那些坑(二)——获取Openid和授权
- 程序员吐槽工资和Bug数量挂钩!网友:不写代码就能最高绩效
- Cortana 在 Windows 11 上谢幕,“死”于生成式 AI 之手的第一款语音助手!
- java executors 详解_线程池—Executors 详解
- 直播如何适配医疗场景?有哪些靠谱的直播平台吗?
- python气象数据处理与绘图_Python气象数据处理与绘图(15):两种波作用通量计算的python实现及对比(Plumb T-N) (已更正)...
- Jetson Nano( 五) TensorRT yolov4 yolov4-tiny yolov5 实测
- scanf的奇淫巧技 解决空格
- Java EE Design Patter