com.android.library)./gradlew :capability-push:assembleReleasecapability-push/build/outputs/aar/capability-push-release.aar如果其他项目通过 AAR 方式引入:
// 其他项目的 build.gradle
dependencies {
implementation files('libs/capability-push-release.aar')
// 或者上传到 Maven 仓库后
// implementation 'com.narutohuo.xindazhou:capability-push:1.0.0'
}
capability-push/src/
└── main/
├── AndroidManifest.xml # Android 清单文件(权限声明)
└── java/
└── com/narutohuo/xindazhou/push/
├── api/ # API 接口层
│ └── PushService.kt # 推送服务接口定义
├── factory/ # 工厂类层
│ └── PushServiceFactory.kt # 服务工厂(统一入口,单例获取)
├── impl/ # 实现层
│ └── PushServiceImpl.kt # 推送服务具体实现(封装极光推送SDK)
├── receiver/ # 接收器层
│ └── JPushReceiver.kt # 推送消息接收器(完全封装在模块内部)
└── model/ # 数据模型层
├── PushConfig.kt # 推送服务配置模型
└── PushResponse.kt # 推送相关的数据模型
├── PushMessage # 推送消息模型
└── PushResponse # 推送响应模型
PushService 接口,包含初始化、别名/标签设置、消息监听、注册/注销等方法
initialize() - 初始化推送服务setAlias() - 设置别名(用户ID)setTags() - 设置标签setMessageListener() - 设置消息监听器register() - 注册推送(开启推送)unregister() - 注销推送(关闭推送)PushServiceFactory 单例工厂init() 方法统一初始化,避免在 Application 中直接调用服务方法getInstance() 方法获取服务实例PushService 接口的具体逻辑PushServiceImpl 单例实现类JPushReceiver BroadcastReceiverPushService 的消息监听器AndroidManifest.xml 中自动注册,业务层无需处理PushConfig - 推送服务配置模型(封装极光推送配置)PushMessage - 推送消息模型(标题、内容、扩展数据等)PushResponse - 推送响应模型(成功/失败、错误信息等)✅ SDK 依赖已添加
cn.jiguang.sdk:jpush:5.9.0 - 极光推送SDKcn.jiguang.sdk:jcore:5.2.0 - 极光推送核心库✅ 代码实现已完成
PushServiceImpl 已实现极光推送 SDK 调用PushServiceFactory 已创建PushConfig 配置模型已创建在 app/src/main/AndroidManifest.xml 中添加以下配置:
<manifest>
<!-- 极光推送权限 -->
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<application>
<!-- 极光推送 AppKey(可选,推荐通过 PushConfig 传入) -->
<!-- <meta-data
android:name="JPUSH_APPKEY"
android:value="您的极光推送 AppKey" /> -->
<!-- 极光推送渠道(可选,推荐通过 PushConfig 传入) -->
<!-- <meta-data
android:name="JPUSH_CHANNEL"
android:value="developer-default" /> -->
<!-- 极光推送服务 -->
<service
android:name="cn.jpush.android.service.PushService"
android:enabled="true"
android:exported="false">
<intent-filter>
<action android:name="cn.jpush.android.intent.PushService" />
</intent-filter>
</service>
<!-- 极光推送接收器 -->
<receiver
android:name="cn.jpush.android.service.PushReceiver"
android:enabled="true"
android:exported="false">
<intent-filter>
<action android:name="cn.jpush.android.intent.NOTIFICATION_RECEIVED_PROXY" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</receiver>
</application>
</manifest>
在 app/src/main/res/values/strings.xml 中配置推送参数(推荐方式,配置统一管理):
<!-- app/src/main/res/values/strings.xml -->
<resources>
<!-- 极光推送配置(必填) -->
<string name="push_jpush_app_key">您的极光推送 AppKey</string>
<string name="push_jpush_channel">developer-default</string>
</resources>
在您的 XinDaZhouApplication 类中初始化推送服务,只需一行代码:
// app/src/main/java/com/narutohuo/xindazhou/XinDaZhouApplication.kt
package com.narutohuo.xindazhou
import android.app.Application
import com.narutohuo.xindazhou.push.factory.PushServiceFactory
import timber.log.Timber
class XinDaZhouApplication : Application() {
override fun onCreate() {
super.onCreate()
// ========== 初始化推送服务(极简调用,完全封装)==========
// 自动完成:初始化、设置监听器、注册推送
PushServiceFactory.init(context = this) { message ->
// 处理接收到的推送消息(可选)
Timber.d("收到推送消息: ${message.title} - ${message.content}")
// 可以在这里处理推送消息,例如显示通知、更新UI等
}
Timber.d("XinDaZhouApplication - onCreate: 推送服务初始化完成")
}
}
或者更简单(不传监听器,使用默认处理):
// 如果不需要自定义处理,可以不传监听器(使用默认日志记录)
PushServiceFactory.init(context = this)
// app/src/main/java/com/narutohuo/xindazhou/XinDaZhouApplication.kt
package com.narutohuo.xindazhou
import android.app.Application
import com.narutohuo.xindazhou.push.factory.PushServiceFactory
import com.narutohuo.xindazhou.push.model.PushConfig
import timber.log.Timber
class XinDaZhouApplication : Application() {
override fun onCreate() {
super.onCreate()
// ========== 初始化推送服务(使用自定义配置)==========
PushServiceFactory.init(
context = this,
config = PushConfig(
appKey = "您的极光推送 AppKey",
channel = "developer-default", // 可选,默认为 "developer-default"
debugMode = BuildConfig.DEBUG // 可选,根据 BuildConfig 设置
)
) { message ->
// 处理接收到的推送消息(可选)
Timber.d("收到推送消息: ${message.title} - ${message.content}")
}
Timber.d("XinDaZhouApplication - onCreate: 推送服务初始化完成")
}
}
优势:
init() 中自动完成重要:BroadcastReceiver 已完全封装在模块内部,业务层不需要创建或注册!
推送模块内部已自动创建并注册了 JPushReceiver,所有推送消息会自动接收并回调到 init() 中设置的消息监听器。
说明:
BroadcastReceiver 在模块的 AndroidManifest.xml 中自动注册init() 中设置的消息监听器BroadcastReceiver 的存在// 初始化(在 Application 中,只需一行代码)
PushServiceFactory.init(context = this) { message ->
// 处理推送消息
Timber.d("收到推送: ${message.title} - ${message.content}")
}
// 后续使用(可选,按需调用)
val pushService = PushServiceFactory.getInstance()
pushService.setAlias("user123") // 设置别名(可选)
pushService.setTags(listOf("vip", "premium")) // 设置标签(可选)
val registrationId = pushService.getRegistrationId() // 获取注册ID(可选)
val isEnabled = pushService.isPushEnabled() // 检查推送状态(可选)
1. Application 初始化(步骤4)- 只需一行代码
XinDaZhouApplication.onCreate()
→ PushServiceFactory.init(context) { message -> ... }
→ 内部自动完成:初始化、设置监听器、注册推送
2. BroadcastReceiver 自动接收消息(完全封装,业务层无需处理)
模块内部的 JPushReceiver.onReceive()
→ pushService.handleReceivedMessage(...)
→ messageListener.invoke(message)
3. 业务层处理消息
Application 中的 messageListener
→ 处理推送消息(显示通知、更新UI等)
PushConfig 中配置正确的 AppKey