OnePush一个可拓展的Android消息推送SDK(使用介绍)

来源:互联网 发布:宝宝起名 知乎 编辑:程序博客网 时间:2024/06/17 16:51

一、为啥会有OnePush

消息推送,在国内,要么自己做,要么集成第三方的sdk,现在第三方推送的sdk,有很多可以选择,友盟,极光,小米等,我们在选择消息推送的时候,肯定是需要一个能及时把消息推送给用户的sdk,那么问题来了,很多国产手机厂商都各自根据android修改的UI系统,各种的进程清理,导致消息推送的后台无法存活,特别是小米、华为的手机上,只要用户清理,基本上推送后台服务就死绝了,当然这个也不能怪人家手机厂商,主要是手机上的app,基本上每个app都有自己的后台推送服务,而且有的流氓程序,甚至还附加了很多其他的后台服务,这样就会导致用户手机耗电、卡顿,手机厂商为了解决既不耗电,也能及时收到消息通知,就推出了自己的推送SDK,比如小米,华为,魅族。如果你的app集成了该厂商的消息推送sdk,那么在该厂商手机上,就属于系统的级别的服务,就算手机被一键清理掉,消息还是能准时的推送到用户的手机上,但是在国内,生产手机的厂家不不止一个,而且每家都有自己的消息推送,如何做到快速的接入和切换推送呢?那么OnePush,就是解决根据不同的厂商手机,集成不同的推送,从而保证消息的及时送达,目前OnePush提供的小米推送,华为推送的实现,如果你还需要使用其他推送SDK,最多写两个类,就可以轻松接入OnePush。

二、怎么集成和使用OnePush

  1. 添加依赖
dependencies {      compile 'com.peng.library:one-push-core:1.0.1'      compile 'com.peng.library:one-push-huawei:1.0.1'      compile 'com.peng.library:one-push-xiaomi:1.0.1'}
  1. 继承BaseOnePushReceiver重写里面的方法,并在AndroidManifest.xml中注册
<receiver android:name="com.peng.openpush.TestPushReceiver">            <intent-filter>                 <action android:name="com.peng.one.push.ACTION_RECEIVE_NOTIFICATION" />                <action android:name="com.peng.one.push.ACTION_RECEIVE_NOTIFICATION_CLICK" />                <action android:name="com.peng.one.push.ACTION_RECEIVE_MESSAGE" />                <action android:name="com.peng.one.push.ACTION_RECEIVE_COMMAND_RESULT" />            </intent-filter></receiver>
  1. 在AndroidManifest.xml的application标签下,添加第三方推送实现类
 <!--如果引入了one-push-huawei类库-->        <meta-data            android:name="OnePush_HuaWei_102"            android:value="com.peng.one.push.huawei.HuaweiPushClient" /> <!--如果引入了one-push-xiaomi库-->        <meta-data            android:name="OnePush_XiaoMi_101"            android:value="com.peng.one.push.xiaomi.XiaomiPushClient" />

关于标签书写规则:
* android:name 必须是以“ OnePush ”开头,并且以”_”进行分割(OnePush_平台名称_平台标识码),在初始化OnePush 的时候,根据标识码和当前手机系统,动态的使用不同平台消息推送。
* android:value 这个是继承IPushClient实现类,全类名路径。

  1. 添加第三方AppKey和AppSecret
    如果使用了one-push-xiaomi,那么需要在AndroidManifest.xml添加小米的AppKey和AppSecret(注意下面的“\ ”必须加上,否则获取到的是float而不是String,就会导致id和key获取不到正确的数据)
  <meta-data            android:name="MI_PUSH_APP_ID"            android:value="\ 2215463567096567312" />        <meta-data            android:name="MI_PUSH_APP_KEY"            android:value="\ 9889423330043400" />
  1. 如果OnePush使用了小米推送,需要注册小米推送权限
 <!--注意下面的必须修改   -->    <permission        android:name="com.peng.one.push.permission.MIPUSH_RECEIVE"        android:protectionLevel="signature" />    <!--这里com.peng.one.push改成你的app的包名,以build.gralde中的applicationId为准-->    <uses-permission android:name="com.peng.one.push.permission.MIPUSH_RECEIVE" />   <!--这里com.peng.one.push改成你的app的包名,以build.gralde中的applicationId为准-->
  1. 初始化OnePush
//初始化的时候,回调该方法,可以根据platformCode和当前系统的类型,进行注册//返回true,则使用该平台的推送,否者就不使用OnePush.init(this, new OnOnePushRegisterListener() {                @Override                public boolean onRegisterPush(int platformCode, String platformName) {                    //platformCode和platformName就是在<meta/>标签中,对应的"平台标识码"和平台名称                    //华为手机使用华为推送,其他手机使用小米推送                    if (RomUtils.isHuaweiRom() && platformCode == 102) {                        Log.i(TAG, "onRegisterPush: 华为推送");                        return true;                    } else if (platformCode == 101) {                        Log.i(TAG, "onRegisterPush: 小米推送");                        return true;                    }                    return false;                }            });
  1. 关于添加其他消息推送SDK具体操作(如果你不满足OnePush提供的小米、华为推送,可根据下面步骤,将其他厂商提供的推送,添加到OnePush里面)

    • 创建XXXClient 实现IPushClient接口,并且重写对应的方法,initContext(Context),会在初始化的使用进行调用,可以在在这里进行获取第三方推送注册需要的ID,KEY或者其他操作,建议在AndroidManifest.xml中的Application标签下添加,然后在initContext(Context)中进行获取。

    • 创建三方消息推送的Receiver后者IntentService,重写三方推送的的接收透传消息和通知的方法,并且使用OneOneRepeater将具体的操作反馈,透传消息,通知,通知点击事件,转发到OnePush。

    • 记得在OnePush注册的时候,进行消息推送平台的选择。

    • 具体操作方法:详见one-push-xiaomi

三、相关api介绍

OnePush详细api
方法名称 描述及解释 init(Context , OnOnePushRegisterListener) 初始化OnePush,建议在Application中onCreate()方法 register() 注册消息推送 unregister() 取消注册消息推送 bindAlias(String) 绑定别名 unBindAlias(String) 取消绑定别名 addTag(String) 添加标签 deleteTag(String) 删除标签 getPushPlatFormCode() 获取推送平台code(AndroidManifest.xml中注册) getPushPlatFormName() 获取推送平台name(AndroidManifest.xml中注册) setDebug(boolean) 设置是否为debug模式

OneRepeater详细api
方法名称 描述及解释 transmitCommandResult(Context,int,int,String,String,String) 转发操作反馈(具体type在OnePush.TYPE_XXX) transmitMessage(Context,String,String,Map
intent://com.peng.one.push/notification?title=标题&content=通知内容&extraMsg=额外信息&keyValue={"key1":"value1","key2":"value2","key3":"value3"}#Intent;scheme=OnePush;launchFlags=0x10000000;end

七、开源地址

OnePush源代码
使用介绍

八、附点图吧,前面太多文字看着太累

小米推送.png

华为推送.png