魅族推送 简介 集成 MD

摘要:
魅族推送服务适用于所有Android系统,但Flyme系统上仅提供系统级推送服务,包括基于YunOS的Flyme系统和安装了Flyme系统的非魅族手机。当魅族推送SDK与其他推送SDK同时集成时,是否存在冲突?魅族推送平台是付费服务吗?魅族推送平台能统计到达人数、点击量和其他数据吗?魅族推送消息提示类型是否支持自定义?魅族推送消息目前不支持自定义通知提示,但通知提醒类型在高级设置中设置。
Markdown版本笔记我的GitHub首页我的博客我的微信我的邮箱
MyAndroidBlogsbaiqiantaobaiqiantaobqt20094baiqiantao@sina.com

目录

目录
魅族推送简介
FAQ
简洁版自定义消息推送Demo
Receiver
配置文件
AndroidManifest.xml
魅族推送简介

Demo地址

魅族官方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》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇如何在任何目录下通过鼠标右键新建 Typora 文件Log4net配置下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

php的流处理

  工作中有这样一类场景,1、数据量很大,2、需要对数据进行实时的简单处理。例如:用户发布的消息会实时写入到message.txt文件中,写入的同时推送进mcq中(使用php脚本)。那么这个简单的功能就比较适合使用php的流的处理方式来实现。php://  是php中已经注册的URL风格的封装协议,用于访问各个输入/输出流(I/O streams)。 #...

Total Commander如何设置自定义快捷键在当前目录打开ConEmu

Total Commander,简称TC,原名Windows Commander,是Windows平台下功能最强大的全能文件管理器。 自从使用了TC基本上就很少再打开Window的文件夹了,因为TC不仅内置了很多功能,而且还有很多的插件可以扩展,所以大部分功能都可以直接在该软件里实现. TC提供了基本上所有的自定义功能,如自定义快捷键等,在TC的Ctrl...

NETCOREAPI 跨域处理

ASPNETCOREAPI 跨域处理 AspNetCoreApi 跨域处理 如果咱们有处理过MV5 跨域问题这个问题也不大。 (1)为什么会出现跨域问题: 浏览器安全限制了前端脚本跨站点的访问资源,所以在调用WebApi 接口时不能成功访问资源,原因“同源策略”的存在: 同源指以下几点相同 (1) IP地址/域名...

Windows桌面开发者的必备软件

如果你新安装好了一台WindowsXP或者Windows7的机器,作为一个开发人员,我建议安装下面这些软件: 1,WinMerge. http://winmerge.org/ 2, Lua for windows,或者Python或者Ruby,选择一个你喜欢的脚本语言。LuaForWindows还自带了一个Scite编辑器,节省了找一个程序员相关编辑器的步...

idea项目多模项目的搭建

本文通过一个例子来介绍利用maven来构建一个多模块的jave项目。开发工具:intellij idea。 一、项目结构 multi-module-PRoject是主工程,里面包含两个模块(Module): web-app是应用层,用于界面展示,依赖于web-service参的服务。 web-service层是服务层,用于给app层提供服务。 二、...

【Azure 环境】在Windows环境中抓取网络包(netsh trace)后,如何转换为Wireshark格式以便进行分析

问题描述 如何在Windows环境中,不安装第三方软件的情况下(使用Windows内置指令),如何抓取网络包呢?并且如何转换为Wireshark 格式呢? 操作步骤 1) 以管理员模式打开CMD,使用netsh trace start capture=yes 命令开始抓取网络包,当需要停止时候,使用netsh trace stop 指令。 ## 开始抓取n...