Android推送之華為推送

一 前言

集成原因,由于公司項(xiàng)目集成極光推送澎灸,Android 8+以上的手機(jī)院塞,app 在未運(yùn)行的情況下接收不到消息,而且現(xiàn)在SDK版本要更新到26性昭,華為手機(jī)有影響拦止。

二 集成

華為推送集成,浪費(fèi)了我不少時(shí)間糜颠,主要還是文檔有些亂汹族。集成之后我把它分為三部分,一其兴,配置集成環(huán)境顶瞒;二,處理接收消息元旬。三榴徐,點(diǎn)擊通知欄,跳轉(zhuǎn)到相應(yīng)頁面匀归。

配置集成環(huán)境
AndroidStudo依賴(我這里只集成推送)

compile 'com.huawei.android.hms:push:2.6.3.301'

SDK獲取 下載相應(yīng) HMSAgent_2.6.3.301.zip 版本坑资,下載完成后,

運(yùn)行GetHMSAgent_cn.bat文件朋譬,
輸入相應(yīng)的信息包名和appid(這個(gè)需要自行申請(qǐng))盐茎,有一個(gè)支付id,沒有可以瞎填徙赢;
選擇完成之后把copysrc目錄的java文件復(fù)制到自己的項(xiàng)目里字柠;
AppManifestConfig.xml復(fù)制到自己的app的AndroidManifest.xml中;

初始化與激活

首先根據(jù)emui版本判斷是否可以使用華為推送

    /**
     * 判斷是否可以使用華為推送
     *
     * @return
     */
    public static Boolean canHuaWeiPush() {

        int emuiApiLevel = 0;
        try {
            Class cls = Class.forName("android.os.SystemProperties");
            Method method = cls.getDeclaredMethod("get", new Class[]{String.class});
            emuiApiLevel = Integer.parseInt((String) method.invoke(cls, new Object[]{"ro.build.hw_emui_api_level"}));
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
        return emuiApiLevel > 5.0;

    }

初始化

HMSAgent.init(application);

激活Token狡赐,并且發(fā)送到服務(wù)器

    // 連接華為服務(wù)器
    public static void HUAWEIConnect(Activity activity) {
        HMSAgent.connect(activity, new ConnectHandler() {
            @Override
            public void onConnect(int rst) {
                LogUtils.e("connect result" + rst);
            }
        });
    }

    /**
     * 激活華為token
     */
    public static void getToken() {
        LogUtils.e("get token: begin");
        HMSAgent.Push.getToken(new GetTokenHandler() {
            @Override
            public void onResult(int rst) {
                LogUtils.e("token result" + rst);
            }
        });
    }

獲取的token窑业,會(huì)在相應(yīng)的廣播接收器中


接受Token的方法

需要在Activity或者application中注冊(cè)IPushCallback監(jiān)聽,獲取token枕屉,在發(fā)送自己的后臺(tái)服務(wù)器常柄。

處理接收消息

華為一般有兩個(gè)revicer,作用不同。下面這個(gè)根據(jù) <intent-filter>西潘,可以看出是用來接收token的卷玉。另外說一下,消息分為透傳消息和通知欄消息喷市。我使用的是通知欄消息相种,這個(gè)Revicer的透傳消息沒用用到。

       <receiver android:name="包名.HuaweiPushRevicer"
            android:permission="cn.gydata.bidding.permission.PROCESS_PUSH_MSG">
            <intent-filter>
                <!-- 必須,用于接收token -->
                <action android:name="com.huawei.android.push.intent.REGISTRATION" />
                <!-- 必須, 用于接收透傳消息 -->
                <action android:name="com.huawei.android.push.intent.RECEIVE" />
                <!-- 必須, 用于接收通知欄消息點(diǎn)擊事件 此事件不需要開發(fā)者處理品姓,只需注冊(cè)就可以-->
                <action android:name="com.huawei.intent.action.PUSH_DELAY_NOTIFY"/>
            </intent-filter>
        </receiver>

另外一個(gè)Revicer寝并,兩個(gè)Revicer不同之處在與 <intent-filter>,功能也就不同腹备。這

      <receiver android:name="相應(yīng)包名.HuaWeiRevicer">
            <intent-filter>
                <!-- 用于點(diǎn)擊通知欄或通知欄上的按鈕后觸發(fā)onEvent回調(diào) -->
                <action android:name="com.huawei.android.push.intent.CLICK" />
                <!-- 查看push通道是否連接, 不查看則不需要 -->
                <action android:name="com.huawei.intent.action.PUSH_STATE"/>

            </intent-filter>
        </receiver>

個(gè)Revicer的作用在于接收通知欄觸發(fā)時(shí)間以及通知欄消息


處理通知欄觸發(fā)時(shí)間與消息
點(diǎn)擊通知欄跳轉(zhuǎn)到相應(yīng)頁面

在AndroidManifest.xml中聲明一個(gè)透明activity衬潦,用來中轉(zhuǎn)到想要的頁面

      <activity
            android:name="包名(自定義).HWPushTranslateActivity"
            android:theme="@android:style/Theme.Translucent">
            <intent-filter>
                <action android:name="android.intent.action.VIEW" />
                <category android:name="android.intent.category.DEFAULT" />
                <data
                    android:host="cn.test.android.push(自定義)"
                    android:path="/notification(自定義)"
                    android:scheme="huaweipush(自定義)" />
            </intent-filter>
        </activity>

生成相應(yīng)的intentUri,把它給后臺(tái)植酥,填寫到華為的服務(wù)器上镀岛。點(diǎn)擊通知欄消息,就可以直接跳轉(zhuǎn)到這個(gè)HWPushTranslateActivity友驮。

 Intent intent = new Intent(Intent.ACTION_VIEW,
 Uri.parse("huaweipush://cn.test.android.push/notification?action=push(自定義action參數(shù))" ));
 intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
 intent.setAction(Intent.ACTION_VIEW);
String intnetUri = intent.toUri(Intent.URI_INTENT_SCHEME);
 Log.d("hwpush", intnetUri);

生成的intnetUri給后臺(tái)就行哎媚。華為就可以隱式跳轉(zhuǎn)到HWPushTranslateActivity,HWPushTranslateActivity里面獲取action再跳轉(zhuǎn)到相應(yīng)的頁面就可以了喊儡。

String action = getIntent().getData().getQueryParameter("action")

三 總結(jié)

難點(diǎn)在于用GetHMSAgent_cn.bat生成符合項(xiàng)目的文件,也不是難就是文檔不清楚稻据。另外艾猜,點(diǎn)擊通知欄不打開啟動(dòng)頁,需要配置HWPushTranslateActivity捻悯。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末匆赃,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子今缚,更是在濱河造成了極大的恐慌算柳,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,454評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件姓言,死亡現(xiàn)場離奇詭異瞬项,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)何荚,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,553評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門囱淋,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人餐塘,你說我怎么就攤上這事妥衣。” “怎么了?”我有些...
    開封第一講書人閱讀 157,921評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵税手,是天一觀的道長蜂筹。 經(jīng)常有香客問我,道長芦倒,這世上最難降的妖魔是什么艺挪? 我笑而不...
    開封第一講書人閱讀 56,648評(píng)論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮熙暴,結(jié)果婚禮上钠龙,老公的妹妹穿的比我還像新娘七兜。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,770評(píng)論 6 386
  • 文/花漫 我一把揭開白布匕坯。 她就那樣靜靜地躺著,像睡著了一般陡厘。 火紅的嫁衣襯著肌膚如雪些椒。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,950評(píng)論 1 291
  • 那天狞谱,我揣著相機(jī)與錄音乃摹,去河邊找鬼。 笑死跟衅,一個(gè)胖子當(dāng)著我的面吹牛孵睬,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播伶跷,決...
    沈念sama閱讀 39,090評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼掰读,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼!你這毒婦竟也來了叭莫?” 一聲冷哼從身側(cè)響起蹈集,我...
    開封第一講書人閱讀 37,817評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎雇初,沒想到半個(gè)月后拢肆,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,275評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡靖诗,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,592評(píng)論 2 327
  • 正文 我和宋清朗相戀三年郭怪,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片呻畸。...
    茶點(diǎn)故事閱讀 38,724評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡移盆,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出伤为,到底是詐尸還是另有隱情咒循,我是刑警寧澤据途,帶...
    沈念sama閱讀 34,409評(píng)論 4 333
  • 正文 年R本政府宣布,位于F島的核電站叙甸,受9級(jí)特大地震影響颖医,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜裆蒸,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,052評(píng)論 3 316
  • 文/蒙蒙 一熔萧、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧僚祷,春花似錦佛致、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,815評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至装哆,卻和暖如春罐脊,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背蜕琴。 一陣腳步聲響...
    開封第一講書人閱讀 32,043評(píng)論 1 266
  • 我被黑心中介騙來泰國打工萍桌, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人凌简。 一個(gè)月前我還...
    沈念sama閱讀 46,503評(píng)論 2 361
  • 正文 我出身青樓上炎,卻偏偏與公主長得像,于是被迫代替她去往敵國和親雏搂。 傳聞我的和親對(duì)象是個(gè)殘疾皇子反症,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,627評(píng)論 2 350

推薦閱讀更多精彩內(nèi)容