一、注册极光账号,创建应用
网址:首页 - 极光
二、集成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);
}