AndroidPush
项目地址:
jiang111/AndroidPush
简介:更方便的将各个 rom 厂商自己的推送服务进行集成,并统一管理
更方便的将各个 rom 厂商自己的推送服务进行集成,并统一管理,使用前还是需要熟悉各个平台的相关文档
各个平台的说明
集成(请看 app 下的 demo)
将项目中的 aar 文件夹的四个包导入到自己的项目并添加依赖,在自己项目下的 gradle 文件添加
//项目最外层的 gradle allprojects { repositories { ... maven { url "https://jitpack.io" } } } //app 下的 gradle defaultConfig { ... ndk { abiFilters 'armeabi', 'armeabi-v7a', 'armeabi-v8a' } manifestPlaceholders = [ JPUSH_PKGNAME : applicationId, JPUSH_APPKEY : "3df7e06ec9bf5e79abdc4a6a", JPUSH_CHANNEL : "develop", PNAME : applicationId ] } dependencies { compile 'com.github.jiang111:AndroidPush:v1.1.1' }
在自己项目下的 manifest 文件中添加如下代码:
<!-- manifest 节点下 --> <uses-permission android:name="${JPUSH_PKGNAME}.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" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.WRITE_SETTINGS" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.GET_TASKS"/> <permission android:name="${PNAME}.permission.MIPUSH_RECEIVE" android:protectionLevel="signature" /> <uses-permission android:name="${PNAME}.permission.MIPUSH_RECEIVE" />
<!-- application 节点下 -->
<meta-data
android:name="JPUSH_CHANNEL"
android:value="${JPUSH_CHANNEL}"
tools:replace="android:value" />
<!-- Required. AppKey copied from Portal -->
<meta-data
android:name="JPUSH_APPKEY"
android:value="${JPUSH_APPKEY}"
tools:replace="android:value" />
<receiver
android:name="com.jiang.android.push.jpush.JPushReceiver"
android:enabled="true">
<intent-filter>
<!--Required 用户注册 SDK 的 intent-->
<action android:name="cn.jpush.android.intent.REGISTRATION" />
<!--Required 用户接收 SDK 消息的 intent-->
<action android:name="cn.jpush.android.intent.MESSAGE_RECEIVED" />
<!--Required 用户接收 SDK 通知栏信息的 intent-->
<action android:name="cn.jpush.android.intent.NOTIFICATION_RECEIVED" />
<!--Required 用户打开自定义通知栏的 intent-->
<action android:name="cn.jpush.android.intent.NOTIFICATION_OPENED" />
<!--Optional 用户接受 Rich Push Javascript 回调函数的 intent-->
<action android:name="cn.jpush.android.intent.ACTION_RICHPUSH_CALLBACK" />
<!-- 接收网络变化 连接/断开 since 1.6.3 -->
<action android:name="cn.jpush.android.intent.CONNECTION" />
<category android:name="${JPUSH_PKGNAME}" />
</intent-filter>
</receiver>
<receiver android:name="com.jiang.android.push.emui.EMHuaweiPushReceiver">
<intent-filter>
<!-- 必须,用于接收 token-->
<action android:name="com.huawei.android.push.intent.REGISTRATION" />
<action android:name="com.huawei.intent.action.PUSH_STATE" /> <!-- 可选,标签、地理位置上报回应,不上报则不需要 -->
<action android:name="com.huawei.android.push.plugin.RESPONSE" />
</intent-filter>
<meta-data
android:name="CS_cloud_ablitity"
android:value="@string/hwpush_ability_value" />
</receiver>
<receiver
android:name="com.jiang.android.push.miui.MiuiReceiver"
android:exported="true">
<!--这里 com.xiaomi.mipushdemo.DemoMessageRreceiver 改成 app 中定义的完整类名-->
<intent-filter>
<action android:name="com.xiaomi.mipush.RECEIVE_MESSAGE" />
</intent-filter>
<intent-filter>
<action android:name="com.xiaomi.mipush.MESSAGE_ARRIVED" />
</intent-filter>
<intent-filter>
<action android:name="com.xiaomi.mipush.ERROR" />
</intent-filter>
</receiver>
<!-- push 应用定义消息 receiver 声明 -->
<receiver android:name="com.jiang.android.push.flyme.FlymeReceiver">
<intent-filter>
<!-- 接收 push 消息 -->
<action android:name="com.meizu.flyme.push.intent.MESSAGE" />
<!-- 接收 register 消息 -->
<action android:name="com.meizu.flyme.push.intent.REGISTER.FEEDBACK" />
<!-- 接收 unregister 消息-->
<action android:name="com.meizu.flyme.push.intent.UNREGISTER.FEEDBACK" />
<!-- 兼容低版本 Flyme3 推送服务配置 -->
<action android:name="com.meizu.c2dm.intent.REGISTRATION" />
<action android:name="com.meizu.c2dm.intent.RECEIVE" />
<category android:name="${PNAME}"></category>
</intent-filter>
</receiver>
<activity
android:name="com.huawei.android.pushselfshow.richpush.RichPushActivity"
android:configChanges="orientation|screenSize|locale|layoutDirection"
android:process=":pushservice"
android:screenOrientation="portrait"
android:theme="@style/hwpush_NoActionBar">
<meta-data
android:name="hwc-theme"
android:value="androidhwext:style/Theme.Emui" />
<intent-filter>
<action android:name="com.huawei.android.push.intent.RICHPUSH" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
<activity
android:name="com.huawei.android.pushselfshow.permission.RequestPermissionsActivity"
android:configChanges="orientation|screenSize|locale|layoutDirection"
android:exported="false"
android:launchMode="singleTop"
android:screenOrientation="portrait"
android:theme="@android:style/Theme.DeviceDefault.Light.Dialog.NoActionBar"></activity>
使用
在使用推送之前,请在 gradle 中配置 JPUSH_APPKEY 字段为 jpush 平台的 key,在小米和魅族开放平台申请的 id 和 key 进行配置,小米和魅族的配置方法:
Const.setMiUI_APP("APP_MIUI_ID", "APP_MIUI_KEY"); Const.setFlyme_APP("APP_FLYME_ID", "APP_FLYME_KEY");
创建 PushInterface 接口的子类,并在相关的方法里实现自己的业务逻辑,并在 Push 类中进行配置。
Push.setPushInterface(pushInterface);
注册推送服务,这里会根据自己的 rom 型号自动配置相关的推送服务:
Push.register(this, BuildConfig.DEBUG); //BuildConfig.DEBUG 代表是否开启各个推送服务的 debug 功能.
4.获取当前 rom 平台:
RomUtil.rom();
各个推送平台的特点
小米和极光推送做的都差不多,通知栏和透传消息都可以自己控制,没什么可说的.
flyme 推送 无法对通知栏做任何的控制(除了改改样式),一切都由后台控制 透传消息的话,在 Receiver 的 onMessage()的回调中使用.
华为推送 如果推送的消息类型为透传消息的话,则无法使用 extra 字段,只可以用 onPushMsg()回调中的 byte[] msg 参数. 通知栏的话,由于点击动作和魅族一样,都是由后台控制.
混淆
在 library 中已经配置混淆,不需要再配置