Android多平臺推送

1、概述

android push集成了小米,華爲,魅族,vivo和oppo五大廠家的push sdk,方便Android各項目集成push。

2、Push類圖

在這裏插入圖片描述

3、Push時序圖

圖片

4、使用姿勢

  • 配置global.gradle和build.gradle

在project的build增加配置

allprojects {
    repositories {
        maven {url "http://developer.huawei.com/repo"}
        maven{url 'https://raw.githubusercontent.com/fomin-zhu/repo/master'}
    }
}

在module的build增加配置

dependencies {
  implementation 'com.fomin.push:push:1.0.0'
}
  • 配置AndroidManifest
注意:appId如果是數字,請在前面加上"\ ",避免讀取數據錯誤
<!--小米推送靜態註冊-->
<meta-data
    android:name="XIAOMI_APP_ID"
    android:value="\ xxxxxxxxxxx" />

<meta-data
    android:name="XIAOMI_APP_KEY"
    android:value="\ xxxxxxxxxxx" />
<!--魅族推送靜態註冊-->
<meta-data
    android:name="MEIZU_APP_ID"
    android:value="xxxxxxxxxxx" />

<meta-data
    android:name="MEIZU_APP_KEY"
    android:value="xxxxxxxxxxx" />
<!--Oppo推送靜態註冊-->
<meta-data
    android:name="OPPO_APP_ID"
    android:value="xxxxxxxxxxx" />

<meta-data
    android:name="OPPO_APP_KEY"
    android:value="xxxxxxxxxxx" />

<!--華爲推送appId-->
<meta-data
    android:name="com.huawei.hms.client.appid"
    android:value="xxxxxxxxxxx"/>

<!--vivo推送appId-->
<meta-data
    android:name="com.vivo.push.app_id"
    android:value="xxxxxxxxxxx" />
<meta-data
    android:name="com.vivo.push.api_key"
    android:value="xxxxxxxxxxx" />
    
<!--自定義BroadcastReceiver-->
<receiver android:name=".push.PushReceiver">
    <intent-filter>
        <action android:name="com.fomin.push.ACTION_RECEIVE_NOTIFICATION" />
        <action android:name="com.fomin.push.ACTION_RECEIVE_NOTIFICATION_CLICK" />
        <action android:name="com.fomin.push.ACTION_RECEIVE_MESSAGE" />
        <action android:name="com.fomin.push.ACTION_RECEIVE_COMMAND_RESULT" />
        <action android:name="com.fomin.push.ACTION_RECEIVE_TOKEN" />
        <category android:name="${applicationId}" />
    </intent-filter>
</receiver>
  • Application初始化
override fun onCreate() {
    if (!Systems.isInMainProcess(application)) return
    super.onCreate()
    pushCenter = PushFactory.init(application)
}

companion object {
    fun pushCenter(): AbsPushCenter? {
        return pushCenter
    }

    fun setPushCenter(pushCenter: AbsPushCenter) {
        this.pushCenter = pushCenter
    }
}
  • 自定義BroadcastReceiver,類名和包路徑固定,類名爲PushReceiver,包路徑$applicationId+".push.PushReceiver",需要兼容8.0系統
class PushReceiver : BasePushReceiver() {

    /**
     * 獲取註冊推送返回的token或regId
     */
    override fun onReceiveToken(context: Context?, msg: PushMsg?) {
        Log.d(PushUtil.TAG, "call onReceiveToken(): context=[$context], message=[$msg]")
    }

    /**
     * 獲取給服務器發送命令的結果,結果封裝在MiPushCommandMessage類中。
     */
    override fun onCommandResult(context: Context?, command: PushCommandMsg?) {
        Log.d(PushUtil.TAG, "call onCommandResult(): context=[$context], message=[$command]")
    }

    /**
     * 接收服務器推送的通知消息,用戶點擊後觸發,消息封裝在 MiPushMessage類中。
     */
    override fun onNotificationMessageClicked(context: Context?, msg: PushMsg?) {
        Log.d(PushUtil.TAG, " call onNotificationMessageClicked(): context=[$context], miPushMessage=[$msg]")
    }

    override fun onReceivePassThroughMessage(context: Context?, msg: PushMsg?) {
        Log.d(PushUtil.TAG, " call onReceivePassThroughMessage(): context=[$context], msg=[$msg]")
    }

    /**
     * 接收服務器推送的通知消息,消息到達客戶端時觸發,還可以接受應用在前臺時不彈出通知的通知消息,消息封裝在 MiPushMessage類中。
     * 在MIUI上,只有應用處於啓動狀態,或者自啓動白名單中,纔可以通過此方法接受到該消息。
     */
    override fun onNotificationMessageArrived(context: Context?, msg: PushMsg?) {
        Log.d(PushUtil.TAG, " call onNotificationMessageArrived(): context=[$context], miPushMessage=[$msg]")
    }
}
  • 混淆
-keep class com.huawei.** {*;}
-keep class com.huaying.seal.common.mipush.PushReceiver{*;}
-dontwarn com.xiaomi.push.**
-dontwarn com.vivo.push.**
-keep class com.vivo.push.**{*; }
-keep class com.meizu.cloud.**{*;}
-keep class com.coloros.mcssdk.**{*;}

github資源:https://github.com/fomin-zhu/push

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章