【52】Android端集成极光推送

Android端集成极光推送

1. 前期准备

1.1 注册极光推送开发者账号

  1. 访问极光推送官网
    打开浏览器,访问 极光推送官网

  2. 注册账号

    • 点击页面右上角的"注册"按钮
    • 填写注册信息(邮箱、密码等)
    • 完成邮箱验证,激活账号
  3. 登录开发者平台
    使用注册的账号密码登录 极光开发者平台

1.2 创建应用

  1. 进入控制台
    登录成功后,自动进入极光开发者控制台

  2. 创建新应用

    • 点击"创建应用"按钮
    • 填写应用名称(建议与实际App名称一致)
    • 选择应用类型为"移动应用"
    • 填写应用包名(必须与AndroidManifest.xml中的package一致)
    • 选择应用分类
    • 点击"创建"按钮完成应用创建

1.3 获取AppKey和Master Secret

应用创建成功后,进入应用详情页:

  1. 获取AppKey

    • 在应用详情页的"应用信息"模块中,找到"AppKey"字段
    • 复制此AppKey,后续在代码中需要使用
  2. 获取Master Secret

    • 在同一页面中,找到"Master Secret"字段
    • 点击"显示"按钮,输入登录密码验证后显示完整的Master Secret
    • 复制此Secret,用于服务器端API调用

1.4 配置应用信息

  1. Android平台配置

    • 在应用详情页左侧导航栏中,点击"推送设置" -> “Android设置”
    • 填写"应用包名"(必须与AndroidManifest.xml中的package一致)
    • 选择"应用签名"方式(可选,建议配置)
    • 配置"通知图标"(可选,用于推送通知显示的图标)
  2. 其他配置

    • 按需配置推送通道(如小米、华为、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获取失败:检查网络连接和初始化代码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

坤铭守心

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值