魅族推送 简介 集成 MD
| Markdown版本笔记 | 我的GitHub首页 | 我的博客 | 我的微信 | 我的邮箱 | 
|---|---|---|---|---|
| MyAndroidBlogs | baiqiantao | baiqiantao | bqt20094 | baiqiantao@sina.com | 
目录
魅族推送简介
魅族官方GitHub 
魅族推送文档 
集成推送平台PushSDK设计文档
应用背景 
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及用户订阅关系在用户重装后是否会发生变化?
用户重装后不会有变化。
简洁版自定义消息推送Demo
PushSDK3.0以后的版本使用了最新的魅族插件发布aar包,因此大家可以直接引用aar包;对于一些通用的权限配置,工程混淆,应用可以不再配置了,现有你只需要在你的应用中配置相应的消息接收的receiver
Receiver
public 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());
    }
}
配置文件
project的build.gradle
allprojects {
    repositories {
        google()
        jcenter()
        maven {url 'https://oss.jfrog.org/artifactory/oss-snapshot-local'}//魅族maven仓路径
    }
}
module的build.gradle
implementation 'com.meizu.flyme.internet:push-internal:3.5.0@aar'//魅族推送
AndroidManifest.xml
添加权限: 
<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"/>
注册四大组件 
只需注册自定义的继承自 MzPushMessageReceiver 的接收消息的Receiver即可
<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>
2018-4-20
魅族推送 简介 集成 MD的更多相关文章
- 华为推送 简介 集成 MD
		
Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...
 - 小米推送 简介 集成 MD
		
Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...
 - 极光推送 JPush 简介 集成 MD
		
Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...
 - umeng友盟消息推送功能集成
		
umeng友盟消息推送功能集成(本人使用的是eclipse开发) 1.首先请自行观看友盟消息推送集成的API文档. 观看地址如下: http://dev.umeng.com/push/android/ ...
 - 手把手教你搞定个推iOS推送SDK集成
		
以下是一位开发者在集成个推iOS推送SDK过程中的真实经历. 作者:Ezreallp 一次偶然的机会,公司的项目要用到推送,我自己本来就很懒,不愿意去弄整套APNS的流程,刚好之前跟朋友聊起过他们的产 ...
 - (转载)iOS 极光推送SDK 集成指南
		
iOS SDK 集成指南 使用提示 本文匹配的 SDK版本:r1.2.5 以后. 查看最近更新了解最新的SDK更新情况. 产品功能说明 极光推送(JPush)是一个端到端的推送服务,使得服务器端消息能 ...
 - 远程推送,集成极光的SDK,证书制造
		
由于iOS操作系统限制,我们APP在后台不能做操作,也不能接收任何数据,所以需要用推送来接收消息. APNs服务,苹果官方网址:https://developer.apple.com/library/ ...
 - Android消息推送 SDK 集成指南
		
使用提示 本文是 Android SDK 标准的集成指南文档. 匹配的 SDK 版本为:r1.8.0及以后版本. 本文随SDK压缩包分发.在你看到本文时,可能当前的版本与本文已经不是很适配.所以建议关 ...
 - 消息推送之百度云推送Android集成与使用方法
		
这两天由于项目需要,研究了一下百度云推送,本来这事没什么多大工作量的,但注册百度开发者账户创建应用令我蛋疼菊紧了好一阵,这些东西做了对技术没啥提升,不做又不行,必经之路.好在我耗费了N多个毫毫秒秒后稀 ...
 
随机推荐
- android touch事件分发流程
			
韩梦飞沙 韩亚飞 313134555@qq.com yue31313 han_meng_fei_sha 三个方法:分发触摸事件dispatchTouchEvent.在触摸事件的时候onTouc ...
 - 图的遍历 之 深搜dfs
			
DFS 遍历 深度优先搜索是一个递归过程,有回退过程. 对一个无向连通图,在访问图中某一起始顶点u 后,由u 出发,访问它的某一邻接顶点v1:再从v1 出发,访问与v1 邻接但还没有访问过的顶点v2: ...
 - [HDU2874]Connections between cities
			
思路:LCA裸题.本来是帮pechpo调错,结果自己写了半天… 设$dis_x$是点$x$到根结点距离,不难想到两点$u$.$v$之间最短距离等于$dis_u+dis_v-dis_{LCA(u,v)} ...
 - Codeforces Round #374 (Div. 2) B. Passwords 贪心
			
B. Passwords 题目连接: http://codeforces.com/contest/721/problem/B Description Vanya is managed to enter ...
 - Redis主从同步分析(转)
			
一.Redis主从同步原理 1.1 Redis主从同步的过程 配置好slave服务器连接的master后,slave会建立和master的连接,然后发送sync命令.无论是第一次同步建立的连接还是连接 ...
 - A CANBus Tiny Network without Transceiver ICs  : STM32F4 Discovery
			
Sometimes you have a CAN equipped processor on a low cost board but it has no CAN transceiver chips. ...
 - InnoDB 与 MYISAM
			
http://www.cnblogs.com/sopc-mc/archive/2011/11/01/2232212.html
 - WebLogic使用总结(六)——WebLogic创建虚拟主机和修改启动端口号
			
一.在WebLogic中创建一个虚拟主机 找到虚拟主机面板,如下图所示:
 - WSAEventSelect模型编程 详解
			
转自:http://blog.csdn.net/wangjieest/article/details/7042108 WSAEventSelect模型编程 WSAEventSelect模型编程这个模型 ...
 - Unity3D实践系列08, MonoBehaviour类的各种触发事件
			
在脚本的生命周期中,有Awake, Start, FixedUpdate, Update, LateUpdate等方法,其实这些属于MonoBehaviour类的事件响应方法,是MonoBehavio ...