Android端集成极光推送
文章目录
1. 前期准备
1.1 注册极光推送开发者账号
-
访问极光推送官网:
打开浏览器,访问 极光推送官网 -
注册账号:
- 点击页面右上角的"注册"按钮
- 填写注册信息(邮箱、密码等)
- 完成邮箱验证,激活账号
-
登录开发者平台:
使用注册的账号密码登录 极光开发者平台
1.2 创建应用
-
进入控制台:
登录成功后,自动进入极光开发者控制台 -
创建新应用:
- 点击"创建应用"按钮
- 填写应用名称(建议与实际App名称一致)
- 选择应用类型为"移动应用"
- 填写应用包名(必须与AndroidManifest.xml中的package一致)
- 选择应用分类
- 点击"创建"按钮完成应用创建
1.3 获取AppKey和Master Secret
应用创建成功后,进入应用详情页:
-
获取AppKey:
- 在应用详情页的"应用信息"模块中,找到"AppKey"字段
- 复制此AppKey,后续在代码中需要使用
-
获取Master Secret:
- 在同一页面中,找到"Master Secret"字段
- 点击"显示"按钮,输入登录密码验证后显示完整的Master Secret
- 复制此Secret,用于服务器端API调用
1.4 配置应用信息
-
Android平台配置:
- 在应用详情页左侧导航栏中,点击"推送设置" -> “Android设置”
- 填写"应用包名"(必须与AndroidManifest.xml中的package一致)
- 选择"应用签名"方式(可选,建议配置)
- 配置"通知图标"(可选,用于推送通知显示的图标)
-
其他配置:
- 按需配置推送通道(如小米、华为、OPPO等厂商通道)
- 配置通知音效、震动等默认行为
- 设置推送环境(开发环境/生产环境)
2.依赖配置
在app/build.gradle文件中添加极光推送SDK依赖:
dependencies {
// 添加极光推送SDK依赖,从5.0.0版本开始可自动拉取JCore包
implementation 'cn.jiguang.sdk:jpush:5.9.2'
}
3.应用签名配置
(1) 生成应用签名:
- 点击"Build"菜单,选择"Generate Signed Bundle / APK"
- 选择"APK"选项,点击"Next"
- 填写应用签名信息(密钥库路径、密钥库密码、别名、别名密码)
- 点击"Finish"完成签名生成
(2) 配置应用签名:
- 在AndroidManifest.xml文件中,添加以下meta-data配置:
xml <meta-data android:name="JPUSH_APPKEY" android:value="你的AppKey" />
- 替换"你的AppKey"为之前获取的AppKey
(3)在app/build.gradle文件中,添加以下配置:
android {
signingConfigs {
appsign {
storeFile file("jks/demo.jks") //指定签名文件路径
storePassword "ccffccd" //签名文件密码
keyAlias "fff" //密钥别名
keyPassword "ccffccd" //密钥密码
}
}
}
(4)应用签名配置
- 目前在调试阶段与项目正式发布阶段都使用的同一个签名文件demo.jks,是因为极光推送SDK在调试阶段与正式发布阶段都需要使用同一个签名文件,以确保推送功能正常运行。
- 注意:极光推送有一个专门生成签名文件的工具,可以在极光推送开发者平台中下载,然后安装到当前开发项目用于调试的手机上,通过选择自己开发项目的包名,即可生成可以在极光推送官网配置的应用签名值。
buildTypes {
debug{
signingConfig signingConfigs.appsign //应用签名配置
buildConfigField "boolean", "DEBUG_TOGGLE", "true" //重写 DEBUG_TOGGLE debug 构建启用调试
}
release{
signingConfig signingConfigs.appsign //应用签名配置
buildConfigField "boolean", "DEBUG_TOGGLE", "false" //重写 DEBUG_TOGGLE release 构建禁用调试
}
}
4.配置APPKey
在app/build.gradle文件中,添加以下配置:
android {
defaultConfig {
manifestPlaceholders = [
JPUSH_PKGNAME: applicationId,
JPUSH_APPKEY: "极光推送创建应用时生成的AppKey值",
JPUSH_CHANNEL: "developer-default"
]
}
}
5.AndroidManifest.xml配置
5.1权限配置
<!-- 极光推送消息权限 -->
<permission
android:name="com.gdc.cxz.permission.JPUSH_MESSAGE"
android:protectionLevel="signature" />
<!-- 使用极光推送消息权限 -->
<uses-permission android:name="com.gdc.cxz.permission.JPUSH_MESSAGE" />
<!-- 允许应用接收用户唤醒设备的广播 -->
<uses-permission android:name="android.permission.RECEIVE_USER_PRESENT" />
<!-- 允许应用显示系统级弹窗 -->
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
5.2服务和接收器配置
<!-- 极光推送核心服务 -->
<service
android:name="cn.jpush.android.service.JCommonService"
android:enabled="true"
android:exported="true" />
<!-- 自定义推送接收器 -->
<receiver
android:name="com.gdc.cxz.service.CxzJpushReceiver"
android:enabled="true"
android:exported="false">
<intent-filter>
<action android:name="cn.jpush.android.intent.REGISTRATION" />
<action android:name="cn.jpush.android.intent.MESSAGE_RECEIVED" />
<action android:name="cn.jpush.android.intent.NOTIFICATION_RECEIVED" />
<action android:name="cn.jpush.android.intent.NOTIFICATION_OPENED" />
<action android:name="cn.jpush.android.intent.NOTIFICATION_CANCELLED" />
<action android:name="cn.jpush.android.intent.CONNECTION" />
<category android:name="自己的应用包名" />
</intent-filter>
</receiver>
5.推送服务初始化
(1)在Application类的onCreate()方法中初始化极光推送:
public class GdcApplication extends GdcMultiDexApplication {
@Override
protected void onCreated() {
// ... 其他初始化代码
initByModule();
// ... 其他初始化代码
}
private void initByModule() {
// ... 其他模块初始化
// 极光推送初始化
JPushInterface.setDebugMode(true); // 设置调试模式(正式发布时应关闭)
JPushInterface.init(this); // 初始化极光推送
// ... 其他模块初始化
}
}
6.自定义推送接收器
创建自定义接收器继承JPushMessageReceiver,处理各类推送事件:
public class CxzJpushReceiver extends JPushMessageReceiver {
@Override
public void onMessage(Context context, CustomMessage customMessage) {
// 接收自定义消息
LogHelper.i("[onMessage] " + customMessage);
// 发送广播通知UI层
Intent intent = new Intent("com.jiguang.demo.message");
intent.putExtra("msg", customMessage.message);
context.sendBroadcast(intent);
}
@Override
public void onNotifyMessageOpened(Context context, NotificationMessage message) {
// 通知被点击时调用
LogHelper.i("[onNotifyMessageOpened] " + message);
try {
// 打开自定义Activity
Intent i = new Intent(context, TestActivity.class);
Bundle bundle = new Bundle();
bundle.putString(JPushInterface.EXTRA_NOTIFICATION_TITLE, message.notificationTitle);
bundle.putString(JPushInterface.EXTRA_ALERT, message.notificationContent);
i.putExtras(bundle);
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
context.startActivity(i);
} catch (Throwable throwable) {
// 异常处理
}
}
@Override
public void onNotifyMessageArrived(Context context, NotificationMessage message) {
// 通知到达时调用
LogHelper.i("[onNotifyMessageArrived] " + message);
}
@Override
public void onNotifyMessageDismiss(Context context, NotificationMessage message) {
// 通知被清除时调用
LogHelper.i("[onNotifyMessageDismiss] " + message);
}
@Override
public void onRegister(Context context, String registrationId) {
// 注册成功获取Registration ID
LogHelper.i("[onRegister] " + registrationId);
// 发送广播通知UI层
Intent intent = new Intent("com.jiguang.demo.register");
context.sendBroadcast(intent);
}
@Override
public void onConnected(Context context, boolean isConnected) {
// 连接状态变化时调用
LogHelper.i("[onConnected] " + isConnected);
}
// 其他回调方法...
}
完成以上配置,即可通过极光推送官网发送推送消息,测试APP端是否能正常接收和处理消息。(后续内容可选择性的阅读)
7.推送消息类型及处理
7.1 自定义消息
不会在通知栏显示
通过onMessage()方法接收
可用于应用内消息传递
7.2 通知消息
会在通知栏显示
到达时触发onNotifyMessageArrived()
点击时触发onNotifyMessageOpened()
清除时触发onNotifyMessageDismiss()
7.3 富媒体消息
包含图片、音频、视频等富媒体内容
需要额外配置和处理
8.高级功能
8.1 标签和别名
// 设置别名
JPushInterface.setAlias(context, sequence, alias);
// 设置标签
JPushInterface.setTags(context, sequence, tags);
8.2推送设置
// 停止推送
JPushInterface.stopPush(context);
// 恢复推送
JPushInterface.resumePush(context);
// 获取推送状态
boolean isPushStopped = JPushInterface.isPushStopped(context);
8.3本地通知
LocalNotification ln = new LocalNotification();
ln.setBuilderId(1);
ln.setContent(title);
ln.setContentText(content);
ln.setBroadcastTime(System.currentTimeMillis() + 1000 * 60); // 1分钟后触发
// 设置其他参数...
JPushInterface.addLocalNotification(context, ln);
9.注意事项
(1)调试模式:正式发布时应将setDebugMode(true)改为setDebugMode(false)
(2)权限配置:确保已添加必要的权限,特别是JPUSH_MESSAGE权限
(3)自定义接收器:必须正确配置Intent Filter,否则无法接收推送事件
(4)Registration ID:每个设备唯一,可用于定向推送
(5)混淆配置:如果使用了ProGuard,需要添加极光推送的混淆规则
10.常见问题排查
(1)推送无法接收:检查网络连接、AppKey配置、权限设置
(2)通知不显示:检查通知权限是否开启、通知渠道配置(Android 8.0+)
(3)点击通知无响应:检查onNotifyMessageOpened()方法的实现
(4)Registration ID获取失败:检查网络连接和初始化代码

3207

被折叠的 条评论
为什么被折叠?



