<meta-data
android:name=“OnePush_XiaoMi_101”
android:value=“com.peng.one.push.xiaomi.XiaomiPushClient”/>
<meta-data
android:name=“OnePush_MeiZu_103”
android:value=“com.peng.one.push.meizu.MeizuPushClient”/>
<meta-data
android:name=“OnePush_UMENG_104”
android:value=“com.peng.one.push.umeng.UMengPushClient”/>
<meta-data
android:name=“OnePush_GeTui_105”
android:value=“com.peng.one.push.getui.GeTuiPushClient”/>
<meta-data
android:name=“OnePush_JPush_106”
android:value=“com.peng.one.push.jpush.JPushClient”/>
<meta-data
android:name=“OnePush_HMSPush_107”
android:value=“com.peng.one.push.huawei.hms.HMSPushClient”/>
关于标签书写规则:
-
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. 关于将来拓展其他平台消息推送说明
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级安卓工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年最新Android移动开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Android)
点击这里免费领取吧!
1136625965)]
[外链图片转存中…(img-SiJpRhBI-1711136625966)]
[外链图片转存中…(img-q1EKPFOq-1711136625966)]
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Android)
[外链图片转存中…(img-FZxEUvzF-1711136625966)]
[外链图片转存中…(img-nELdra2u-1711136625967)]
[外链图片转存中…(img-DzOPqSPx-1711136625967)]