魅族推送 簡介 集成 MD


Markdown版本筆記 我的GitHub首頁 我的博客 我的微信 我的郵箱
MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina.com

目錄

魅族推送簡介

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM