简介
Demo地址:
https://github.com/baiqiantao/PushTest.git
魅族官方GitHub:
https://github.com/MEIZUPUSH
魅族推送文档:
https://github.com/MEIZUPUSH/PushDemo#pushsdk_internal
集成推送平台PushSDK设计文档:
https://github.com/MEIZUPUSH/UpsDemo
应用背景
app为了及时获取到服务器端的消息更新,一般会采用轮寻或者推送的方式来获取消息更新,轮寻导致终端设备流量、电量、等系统资源严重浪费,所以目前采用的比较广泛的是推送的方式,目前 Meizu 的 Push SDK 不能脱离 Flyme OS 存在,当该 SDK 脱离 Flyme OS 之后由于没有长链接导致不能正常收到推送消息。本 SDK 首先要解决的是长链接由 SDK 自己维护,同时还要解决的就是多个 app 引用同一个 SDK 时长链接的复用问题。
设计思想
该 SDK 以 Android Service 方式运行,独占一个进程,该 Service 自己维护与推送服务器的长链接。如果一款手机安装了多个集成了 SDK 的手机应用,则只有一个 service 实例运行,不会每个应用都会开启一个后台 service,而是采用多个应用共享一个Push通道的方式,这就解决了长链接复用的问题,节省了对流量、电量的浪费。使用该 SDK 只需要关心 PushManager 提供的API,与 MzPushMessageReceiver 提供的回调接口以及相应的配置即可。
FAQ
魅族推送服务是否支持所有Android平台?
魅族推送服务适用所有安卓系统,
但仅在Flyme系统上有系统级的推送服务,包括基于YunOS的Flyme系统,及安装了Flyme系统的非魅族手机。
魅族推送SDK与其他推送SDK同时集成时是否会有冲突?
在与其他推送SDK同时集成时不会有冲突。
魅族推送平台的服务是收费服务吗?
基础推送功能是免费的,定制功能会考虑收费。
魅族推送平台是否可以统计到达数、点击数等数据?
通知栏消息可以统计到推送数、接收数、展示数、点击数等数据,透传消息可以统计到推送数、接收数,展示数,点击数需客户端埋点上报。
魅族推送消息提示类型是否支持自定义?
魅族推送消息暂时不支持自定义通知提示,但是在高级设置中的设置通知提醒类型(震动、闪灯、声音)。用户收到消息时优先由系统设置项控制是否按照指定类型提醒。
通过服务器传的参数,客户端获取一定要用getString?服务器接了API也是string类型的?
全部都会转为string
PushId及用户订阅关系在用户重装后是否会发生变化?
用户重装后不会有变化。
SDK里的Utility.isFlymeRom()不能用来校验魅族手机么? 有没有推荐的方法,可以校验是flyme系统的?
简洁版自定义消息推送Demo
PushSDK3.0以后的版本使用了最新的魅族插件发布aar包,因此大家可以直接引用aar包;对于一些通用的权限配置,工程混淆,应用可以不再配置了,现有你只需要在你的应用中配置相应的消息接收的receiver
Receiver
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70public class MZPushReceiver extends MzPushMessageReceiver { @Override //接收服务器推送的透传消息 public void onMessage(Context context, String s) { Log.i("bqt", "魅族【onMessage】" + s); } @Override //注册。调用PushManager.register(context方法后,会在此回调注册状态应用在接受返回的pushid public void onRegister(Context context, String pushid) { Log.i("bqt", "魅族【onRegister】" + pushid); } @Override //取消注册。调用PushManager.unRegister(context)方法后,会在此回调反注册状态 public void onUnRegister(Context context, boolean b) { Log.i("bqt", "魅族【onUnRegister】" + b); } @Override //设置通知栏小图标。重要!详情参考应用小图标自定设置 public void onUpdateNotificationBuilder(PushNotificationBuilder builder) { Log.i("bqt", "魅族【onUpdateNotificationBuilder】" + builder.getmNotificationsound() + " " + builder.getmLargIcon() + " " + builder.getmNotificationDefaults() + " " + builder.getmNotificationFlags() + " " + builder.getmStatusbarIcon() + " " + Arrays.toString(builder.getmVibratePattern())); builder.setmStatusbarIcon(R.drawable.ic_launcher); } @Override //检查通知栏和透传消息开关状态回调 public void onPushStatus(Context context, PushSwitchStatus pushSwitchStatus) { Log.i("bqt", "魅族【onPushStatus】" + pushSwitchStatus.toString()); } @Override //调用新版订阅PushManager.register(context,appId,appKey)回调 public void onRegisterStatus(Context context, RegisterStatus registerStatus) { Log.i("bqt", "魅族【onRegisterStatus】" + registerStatus.toString()); } @Override //新版反订阅回调 public void onUnRegisterStatus(Context context, UnRegisterStatus unRegisterStatus) { Log.i("bqt", "魅族【onUnRegisterStatus】" + unRegisterStatus.toString()); } @Override //标签回调 public void onSubTagsStatus(Context context, SubTagsStatus subTagsStatus) { Log.i("bqt", "魅族【onSubTagsStatus】" + subTagsStatus.toString()); } @Override //别名回调 public void onSubAliasStatus(Context context, SubAliasStatus subAliasStatus) { Log.i("bqt", "魅族【onSubAliasStatus】" + subAliasStatus.toString()); } @Override //通知栏消息到达回调,flyme6基于android6.0以上不再回调 public void onNotificationArrived(Context context, MzPushMessage mzPushMessage) { Log.i("bqt", "魅族【onNotificationArrived】" + mzPushMessage.toString()); } @Override //通知栏消息点击回调 public void onNotificationClicked(Context context, MzPushMessage mzPushMessage) { Log.i("bqt", "魅族【onNotificationClicked】" + mzPushMessage.toString()); } @Override //通知栏消息删除回调;flyme6基于android6.0以上不再回调 public void onNotificationDeleted(Context context, MzPushMessage mzPushMessage) { Log.i("bqt", "魅族【onNotificationDeleted】" + mzPushMessage.toString()); } }
Receiver
复制代码
1x
1
复制代码
1public class MZPushReceiver extends MzPushMessageReceiver {
2
复制代码
1
2
3
复制代码
1
2
4
复制代码
1
2//接收服务器推送的透传消息
5
复制代码
1
2public void onMessage(Context context, String s) {
6
复制代码
1
2
3Log.i("bqt", "魅族【onMessage】" + s);
7
复制代码
1
2}
8
复制代码
1
2
9
复制代码
1
2
10
复制代码
1
2//注册。调用PushManager.register(context方法后,会在此回调注册状态应用在接受返回的pushid
11
复制代码
1
2public void onRegister(Context context, String pushid) {
12
复制代码
1
2
3Log.i("bqt", "魅族【onRegister】" + pushid);
13
复制代码
1
2}
14
复制代码
1
2
15
复制代码
1
2
16
复制代码
1
2//取消注册。调用PushManager.unRegister(context)方法后,会在此回调反注册状态
17
复制代码
1
2public void onUnRegister(Context context, boolean b) {
18
复制代码
1
2
3Log.i("bqt", "魅族【onUnRegister】" + b);
19
复制代码
1
2}
20
复制代码
1
2
21
复制代码
1
2
22
复制代码
1
2//设置通知栏小图标。重要!详情参考应用小图标自定设置
23
复制代码
1
2public void onUpdateNotificationBuilder(PushNotificationBuilder builder) {
24
复制代码
1
2
3
4Log.i("bqt", "魅族【onUpdateNotificationBuilder】" + builder.getmNotificationsound() + " "
25
复制代码
1
2
3
4
5
6
7
8+ builder.getmLargIcon() + " " + builder.getmNotificationDefaults() + " " + builder.getmNotificationFlags() + " "
26
复制代码
1
2
3
4
5
6+ builder.getmStatusbarIcon() + " " + Arrays.toString(builder.getmVibratePattern()));
27
复制代码
1
2
3builder.setmStatusbarIcon(R.drawable.ic_launcher);
28
复制代码
1
2}
29
复制代码
1
2
30
复制代码
1
2
31
复制代码
1
2//检查通知栏和透传消息开关状态回调
32
复制代码
1
2public void onPushStatus(Context context, PushSwitchStatus pushSwitchStatus) {
33
复制代码
1
2
3Log.i("bqt", "魅族【onPushStatus】" + pushSwitchStatus.toString());
34
复制代码
1
2}
35
复制代码
1
2
36
复制代码
1
2
37
复制代码
1
2//调用新版订阅PushManager.register(context,appId,appKey)回调
38
复制代码
1
2public void onRegisterStatus(Context context, RegisterStatus registerStatus) {
39
复制代码
1
2
3Log.i("bqt", "魅族【onRegisterStatus】" + registerStatus.toString());
40
复制代码
1
2}
41
复制代码
1
2
42
复制代码
1
2
43
复制代码
1
2//新版反订阅回调
44
复制代码
1
2public void onUnRegisterStatus(Context context, UnRegisterStatus unRegisterStatus) {
45
复制代码
1
2
3Log.i("bqt", "魅族【onUnRegisterStatus】" + unRegisterStatus.toString());
46
复制代码
1
2}
47
复制代码
1
2
48
复制代码
1
2
49
复制代码
1
2//标签回调
50
复制代码
1
2public void onSubTagsStatus(Context context, SubTagsStatus subTagsStatus) {
51
复制代码
1
2
3Log.i("bqt", "魅族【onSubTagsStatus】" + subTagsStatus.toString());
52
复制代码
1
2}
53
复制代码
1
2
54
复制代码
1
2
55
复制代码
1
2//别名回调
56
复制代码
1
2public void onSubAliasStatus(Context context, SubAliasStatus subAliasStatus) {
57
复制代码
1
2
3Log.i("bqt", "魅族【onSubAliasStatus】" + subAliasStatus.toString());
58
复制代码
1
2}
59
复制代码
1
2
60
复制代码
1
2
61
复制代码
1
2//通知栏消息到达回调,flyme6基于android6.0以上不再回调
62
复制代码
1
2public void onNotificationArrived(Context context, MzPushMessage mzPushMessage) {
63
复制代码
1
2
3Log.i("bqt", "魅族【onNotificationArrived】" + mzPushMessage.toString());
64
复制代码
1
2}
65
复制代码
1
2
66
复制代码
1
2
67
复制代码
1
2//通知栏消息点击回调
68
复制代码
1
2public void onNotificationClicked(Context context, MzPushMessage mzPushMessage) {
69
复制代码
1
2
3Log.i("bqt", "魅族【onNotificationClicked】" + mzPushMessage.toString());
70
复制代码
1
2}
71
复制代码
1
2
72
复制代码
1
2
73
复制代码
1
2//通知栏消息删除回调;flyme6基于android6.0以上不再回调
74
复制代码
1
2public void onNotificationDeleted(Context context, MzPushMessage mzPushMessage) {
75
复制代码
1
2
3Log.i("bqt", "魅族【onNotificationDeleted】" + mzPushMessage.toString());
76
复制代码
1
2}
77
复制代码
1}
配置文件
project的
build.gradle
复制代码
1
2
3
4
5
6
7allprojects { repositories { google() jcenter() maven {url 'https://oss.jfrog.org/artifactory/oss-snapshot-local'}//魅族maven仓路径 } }
复制代码
1x
1
复制代码
1allprojects {
2
复制代码
1repositories {
3
复制代码
1google()
4
复制代码
1jcenter()
5
复制代码
1maven {url 'https://oss.jfrog.org/artifactory/oss-snapshot-local'}//魅族maven仓路径
6
复制代码
1
2}
7
复制代码
1}
module的build.gradle
复制代码
1implementation 'com.meizu.flyme.internet:push-internal:3.5.0@aar'//魅族推送
1
复制代码
1implementation 'com.meizu.flyme.internet:push-internal:3.5.0@aar'//魅族推送
AndroidManifest.xml
添加权限:
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13<permission android:name="com.bqt.push.push.permission.MESSAGE" android:protectionLevel="signature"/> <permission android:name="com.bqt.push.permission.C2D_MESSAGE" android:protectionLevel="signature"/> <!-- 兼容flyme5.0以下版本--> <uses-permission android:name="com.meizu.flyme.push.permission.RECEIVE"/> <uses-permission android:name="com.bqt.push.push.permission.MESSAGE"/> <!-- 兼容flyme3.0配置权限--> <uses-permission android:name="com.meizu.c2dm.permission.RECEIVE"/> <uses-permission android:name="com.bqt.push.permission.C2D_MESSAGE"/>
13
1
13
1
复制代码
1<permission
2
复制代码
1android:name="com.bqt.push.push.permission.MESSAGE"
3
复制代码
1android:protectionLevel="signature"/>
4
复制代码
1<permission
5
复制代码
1android:name="com.bqt.push.permission.C2D_MESSAGE"
6
复制代码
1android:protectionLevel="signature"/>
7
复制代码
1
8
复制代码
1<!-- 兼容flyme5.0以下版本-->
9
复制代码
1<uses-permission android:name="com.meizu.flyme.push.permission.RECEIVE"/>
10
复制代码
1<uses-permission android:name="com.bqt.push.push.permission.MESSAGE"/>
11
复制代码
1<!-- 兼容flyme3.0配置权限-->
12
复制代码
1<uses-permission android:name="com.meizu.c2dm.permission.RECEIVE"/>
13
复制代码
1<uses-permission android:name="com.bqt.push.permission.C2D_MESSAGE"/>
注册四大组件:
只需注册
自定义的继承自 MzPushMessageReceiver 的接收
消息的Receiver即可
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16<receiver android:name="com.bqt.push.MZPushReceiver" tools:ignore="ExportedReceiver"> <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="com.bqt.push"/> </intent-filter> </receiver>
17
1
复制代码
1<receiver
2
复制代码
1android:name="com.bqt.push.MZPushReceiver"
3
复制代码
1tools:ignore="ExportedReceiver">
4
复制代码
1<intent-filter>
5
复制代码
1
2<!-- 接收push消息 -->
6
复制代码
1
2<action android:name="com.meizu.flyme.push.intent.MESSAGE"/>
7
复制代码
1
2<!-- 接收register消息 -->
8
复制代码
1
2<action android:name="com.meizu.flyme.push.intent.REGISTER.FEEDBACK"/>
9
复制代码
1
2<!-- 接收unregister消息-->
10
复制代码
1
2<action android:name="com.meizu.flyme.push.intent.UNREGISTER.FEEDBACK"/>
11
复制代码
1
2<!-- 兼容低版本Flyme3推送服务配置 -->
12
复制代码
1
2<action android:name="com.meizu.c2dm.intent.REGISTRATION"/>
13
复制代码
1
2<action android:name="com.meizu.c2dm.intent.RECEIVE"/>
14
复制代码
1
15
复制代码
1
2<category android:name="com.bqt.push"/>
16
复制代码
1</intent-filter>
17
复制代码
1</receiver>
2018-4-20
最后
以上就是积极康乃馨最近收集整理的关于魅族推送 简介 集成简洁版自定义消息推送Demo的全部内容,更多相关魅族推送内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复