Android 消息推送OnePush,kotlin常用语法

关于标签书写规则:

  • android:name 必须是以“ OnePush ”开头,并且以“_“进行分割(OnePush_平台名称_平台标识码),在初始化OnePush 的时候,根据标识码和当前手机系统,动态的使用不同平台消息推送。

  • android:value 这个是继承IPushClient实现类,全类名路径。

5. 添加第三方AppKey和AppSecret

如果使用了one-push-xiaomi,那么需要在AndroidManifest.xml添加小米的AppKey和AppSecret(注意下面的“\ ”必须加上,否则获取到的是float而不是String,就会导致id和key获取不到正确的数据)

<meta-data

android:name=“UMENG_APPKEY”

android:value=“59c87440734be47b6700001b”/>

<meta-data

android:name=“UMENG_MESSAGE_SECRET”

android:value=“b856987f2ca836a784698e150d36ff2a”/>

<meta-data

android:name=“MI_PUSH_APP_ID”

android:value="\ 2882303761517577233"/>

<meta-data

android:name=“MI_PUSH_APP_KEY”

android:value="\ 5701757717233"/>

<meta-data

android:name=“PUSH_APPID”

android:value=“edX56uUoQ7ASr4ru4c3rVA”/>

<meta-data

android:name=“PUSH_APPKEY”

android:value=“Crl1UEA5Fd8tooEDmS5aA3”/>

<meta-data

android:name=“PUSH_APPSECRET”

android:value=“D9hcD0r6Ec5ANGSLY92XP3”/>

<meta-data

android:name=“MEIZU_PUSH_APP_ID”

android:value=“111338”/>

<meta-data

android:name=“MEIZU_PUSH_APP_KEY”

android:value=“db1659369a85459abe5384814123ab5a”/>

<meta-data

android:name=“JPUSH_CHANNEL”

android:value=“developer”/>

<meta-data

android:name=“JPUSH_APPKEY”

android:value=“41bb9f84d2158a7be9de3b47”/>

<meta-data

android:name=“com.huawei.hms.client.appid”

android:value=“100099491”/>

6. 初始化OnePush

//初始化的时候,回调该方法,可以根据platformCode和当前系统的类型,进行注册

//返回true,则使用该平台的推送,否者就不使用

//只在主进程中注册(注意:umeng推送,除了在主进程中注册,还需要在channel中注册)

if (BuildConfig.APPLICATION_ID.equals(currentProcessName) || BuildConfig.APPLICATION_ID.concat(":channel").equals(currentProcessName)) {

OnePush.init(this, ((platformCode, platformName) -> {

//platformCode和platformName就是在标签中,对应的"平台标识码"和平台名称

if (RomUtils.isMiuiRom()) {

return platformCode == 101;

} else if (RomUtils.isHuaweiRom()) {

return platformCode == 102;

} else if (RomUtils.isFlymeRom()) {

return platformCode == 105;

}else {

return platformCode == 104;

}

}));

OnePush.register();

}

7. 后台推送动作说明:

  • 注册友盟推送除了在主进程中,还需要在channel进程中进行注册,具体操作见DEMO(UMeng官方推送就是这样要求的)

  • 友盟推送:后台配置后续动作,为“自定义行为”。

  • 小米推送:后台配置点击后续动作,为“由应用客户端自定义”。

  • 魅族推送:后台配置点击动作,为“应用客户端自定义”

  • 个推推送:后台配置后续动作为打开应用,如果你发送的通知,为了保证你点击通知栏能收到在NotificationClick的回调,每一个通知必须都带有one-push规定格式的透传消息,如果你只发送透传,那就不必按照下面的格式。

个推通知中透传消息json:

{

“onePush”:true,

“title”:“通知标题”,

“content”:“通知内容”,

“extraMsg”:“额外信息”,

“keyValue”:{

“key1”:“value1”,

“key2”:“value2”,

“key3”:“value3”

}

}

  • 华为推送和华为HMS服务:后台配置后续行为,为“自定义动作”,具体内容,可由OnePushService包:com.peng.one.push.service.huawei.intent.HWPushIntent生成,如果后台不是java开发的,参照HWPushIntent重新写。
8. 集成 友盟推送 的童鞋注意啦
  • OnePush拓展的友盟推送是[版本v3.1.1a]。

  • 关于utdid重复引入的问题,可以通过下面的方案解决

//如果utdid和你工程项目里面发生冲突了,请修改成这个依赖

compile (‘com.peng.library:one-push-umeng:lastVersion’ ){

exclude group: ‘com.peng.library’,module:‘one-push-umeng-utdid4all’

}

  • 关于友盟推送so文件处理,OnePush拓展的友盟推送,默认将所有的so文件引入了,这样就导致友盟推送aar文件大小达到2.25M左右,所以下面提供一个裁剪so文件的方法 第一步:在工程根目录的gradle.properties文件中,添加 android.useDeprecatedNdk=true 第二步:在项目(app)的build.gradle节点defaultConfig下添加

ndk {

// 设置支持的SO库

abiFilters ‘armeabi’//,‘armeabi-v7a’, ‘x86’, ‘x86_64’, ‘arm64-v8a’,‘mips’,‘mips64’

}

根据自己工程的需要,配置不同的so编译,然后Rebuild Project。

  • 最后啰嗦几句,其实只要添加armeabi,就可以了,armeabi在每个平台都是可以用的,俗称万能油。只是在其他CPU平台上,使用armeabi,效率不是很高而已,其实微信也是只使用了armeabi,只不过它为了提高效率,他将v7a也放在了armeabi里面,最后根据具体安装的手机CPU,动态加载而已。
9. 集成 华为推送 的童鞋注意啦
  • BaseOnePushReceiver中的onReceiveNotification()方法,在使用的华为推送的时候,该方法不会被调用,因为华为推送没有提供这样的支持。

  • BaseOnePushReceiver中的onReceiveNotificationClick()方法,在使用华为推送的时候,虽然华为支持,但是如果app被华为一键清理掉后,收到通知,那么点击通知是不会调用华为推送的onEvent()方法,那么如果我们这里转发,onReceiveNotificationClick()是不会收到的。

  • 为了解决华为推送,在手机上被清理掉后,onReceiveNotificationClick()不被调用的情况,OnePush在华为推送上,使用跳转到指定Activity的推送通知,那么服务端必须提供一个Intent序列化的uri,OnePush提供的Java服务端消息推送示例中,已经提供了服务端序列化Intent的uri的实现(详见:com.peng.one.push.service.huawei.intent.HWPushIntent)。

10. 关于将来拓展其他平台消息推送说明
  • 个人感觉,除了厂商的推送,其他的第三方推送只需要集成一个就可以了,假如你想使用OnePush,但是目前OnePush拓展的消息推送平台,没有你目前使用的怎么办呢,可以参照OnePush拓展详细说明,进行集成。

  • 如果你已经拓展其他平台的消息推送,并且测试通过,可以将代码Push过来,我检查过后,合并进来,这样可以方便大家。

11. 拓展其他平台说明

关于添加其他消息推送SDK具体操作(如果你不满足OnePush提供的小米、华为推送,可根据下面步骤,将其他厂商提供的推送,添加到OnePush里面)

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

  • 创建和重写三方消息推送的Receiver或者IntentService(一般第三方会让你继承他的receiver,这里指的就是他),重写三方推送的的接收透传消息和通知的方法,调用OneRepeater的transmitXXX方法,将通知、透传消息、通知点击事件、以及其他事件,转发到OnePush。

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

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

12. 代码混淆

-dontoptimize

-dontpreverify

-dontwarn com.taobao.**

-dontwarn anet.channel.**

-dontwarn anetwork.channel.**

-dontwarn org.android.**

-dontwarn org.apache.thrift.**

-dontwarn com.xiaomi.**

-dontwarn com.huawei.**

-dontwarn com.peng.one.push.**

-dontwarn com.igexin.**

-dontwarn cn.jpush.**

-dontwarn cn.jiguang.**

-keepattributes Annotation

-keep class cn.jpush.** { *; }

-keep class * extends cn.jpush.android.helpers.JPushMessageReceiver { *; }

-keep class cn.jiguang.** { *; }

-keep class com.taobao.** {*;}

-keep class org.android.** {*;}

-keep class anet.channel.** {*;}

-keep class com.umeng.** {*;}

-keep class com.xiaomi.** {*;}

-keep class com.huawei.** {*;}

-keep class com.hianalytics.android.** {*;}

-keep class com.meizu.cloud.**{*;}

-keep class org.apache.thrift.** {*;}

-keep class com.igexin.** { *; }

-keep class org.json.** { *; }

-keep class com.alibaba.sdk.android.**{*;}

-keep class com.ut.**{*;}

-keep class com.ta.**{*;}

-keep public class **.R$*{

public static final int *;

}

#(可选)避免Log打印输出

-assumenosideeffects class android.util.Log {

public static *** v(…);

public static *** d(…);

public static *** i(…);

public static *** w(…);

}

OnePush的混淆

-keep class * extends com.peng.one.push.core.IPushClient{*

三、相关api介绍

OnePush详细api

| 方法名称 | 描述及解释 |

| — | — |

总结

开发是面向对象。我们找工作应该更多是面向面试。哪怕进大厂真的只是去宁螺丝,但你要进去得先学会面试的时候造飞机不是么?

作者13年java转Android开发,在小厂待过,也去过华为,OPPO等,去年四月份进了阿里一直到现在。等大厂待过也面试过很多人。深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长,不成体系的学习效果低效漫长且无助。

这里附上上述的技术体系图相关的几十套腾讯、头条、阿里、美团等公司的面试题,把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,这里以图片的形式给大家展示一部分。

相信它会给大家带来很多收获:

Android 消息推送OnePush,kotlin常用语法

Android 消息推送OnePush,kotlin常用语法

资料太多,全部展示会影响篇幅,暂时就先列举这些部分截图

当程序员容易,当一个优秀的程序员是需要不断学习的,从初级程序员到高级程序员,从初级架构师到资深架构师,或者走向管理,从技术经理到技术总监,每个阶段都需要掌握不同的能力。早早确定自己的职业方向,才能在工作和能力提升中甩开同龄人。

,OPPO等,去年四月份进了阿里一直到现在。等大厂待过也面试过很多人。深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长,不成体系的学习效果低效漫长且无助。

这里附上上述的技术体系图相关的几十套腾讯、头条、阿里、美团等公司的面试题,把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,这里以图片的形式给大家展示一部分。

相信它会给大家带来很多收获:

[外链图片转存中…(img-0y82E1mB-1643521955170)]

[外链图片转存中…(img-I8gFW4ru-1643521955171)]

资料太多,全部展示会影响篇幅,暂时就先列举这些部分截图

当程序员容易,当一个优秀的程序员是需要不断学习的,从初级程序员到高级程序员,从初级架构师到资深架构师,或者走向管理,从技术经理到技术总监,每个阶段都需要掌握不同的能力。早早确定自己的职业方向,才能在工作和能力提升中甩开同龄人。

本文已被CODING开源项目:《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》收录

上一篇:18在protel DXP中PCB图中给电路板绘制边框、安装孔的方法介绍成都电路板设计


下一篇:第一周小结