OPPO平臺推送集成及注意事項

最近由于公司有需求需要集成OPPO平臺的推送菱鸥,所以在此處寫下自己的心路歷程铆帽,以便后來的人可以避免遇到跟筆者一樣的坑胞枕。以下如果有錯誤的地方希望大家指出,謝謝各位看官娩嚼。
OPPO開放平臺:https://open.oppomobile.com/

首先介紹一下OPPO推送平臺:
OPPO Push是OPPO公司向開發(fā)者提供的消息推送服務(wù)蘑险,通過服務(wù)端端與OS端建立的一條穩(wěn)定、可靠的長連接通道待锈,向OPPO手機系統(tǒng)(ColorOS)上的APP應(yīng)用客戶端實時推送消息的服務(wù)漠其。在最新ColorOS系統(tǒng)上,會直接使用系統(tǒng)長連接通道竿音,所有app會和系統(tǒng)共享一個長連接
通過消息推送服務(wù)和屎,可有效的提升開發(fā)者應(yīng)用的活躍和留存,改善產(chǎn)品體驗春瞬。
1)支持平臺
目前支持 ColorOS3.1及以上的系統(tǒng)的oppo的機型柴信,一加5/5t及以上機型,realme所有機型宽气。
2)通知消息類型
OPPO推送暫時只支持通知欄消息的推送随常。消息下發(fā)到OS系統(tǒng)模塊并由系統(tǒng)通知模塊展示,在用戶點擊通知前萄涯,不啟動應(yīng)用绪氛。整個過程環(huán)保省電。

2.1.主要功能
1)保持與服務(wù)器的長連接涝影,以便消息能夠即時推送到達(dá)客戶端枣察;
2)接收通知與自定義消息,并向開發(fā)者App 傳遞相關(guān)信息燃逻。
2.2.主要特點
1)客戶端維持連接占用資源少序目、耗電低
2)SDK集成方便,接口功能齊全
3)服務(wù)器大容量伯襟、穩(wěn)定
2.3.資源說明
4)AndroidManifest.xml:客戶端嵌入SDK參考的配置文件猿涨;
5)Libs:OPush SDK 開發(fā)包;
6)OpushDemo:是一個完整的Android 項目姆怪,通過這個演示了OPush SDK的基本用法叛赚,可以用來做代碼參考。
7)目前只支持通知欄消息稽揭,透傳消息暫不支持
2.4.版本說明
目前SDK只支持Android 4.0或以上版本的手機系統(tǒng)俺附。

OPPO推送數(shù)量限制如下圖

image.png

公信和私信的區(qū)別詳細(xì)的請查看:https://open.oppomobile.com/wiki/doc#id=10614

image.png

下面的集成教程主要分為兩個部分:
第一部分主要是申請賬號和申請appKey;(注意坑淀衣,已標(biāo)注)
第二部分主要是代碼上的實現(xiàn);

第一部分介紹:
如果要集成推送的話召调,首先需要注冊一個賬號膨桥,這里我就不多說蛮浑,只需要注意記住一點,我們需要選擇主體類型為企業(yè)(當(dāng)為主體為個人的時候不能創(chuàng)建App)點擊即可填寫相關(guān)信息只嚣。


image.png

主體類型為個人的賬戶會在后續(xù)接入推送時遇到以下場景


image.png

而主體類型為企業(yè)則如下沮稚,可以愉快的進(jìn)行下去
image.png

這個時候點擊創(chuàng)建應(yīng)用,第一個選擇框我個人選擇的是普通應(yīng)用册舞,后面兩個編輯框就不用我多說了蕴掏,appname和applicationId 直接提交就好了


image.png

=====================坑來了=====================

看到下面這個證明你的app包名沒有被注冊過撩银,但是不要以為這樣就可以直接用appkey和appsecret,這個時候坑來了鞠呈,我們需要點擊一下“推送服務(wù)”赤套,如下

image.png

然后可以看到下面這樣一個頁面入录,上面寫得很清楚剔难,這個時候需要“申請開通”一下苇羡,審核時間差不多一天(如果少了這一步感局,會出現(xiàn)這樣一個錯誤:INVALID_APP_KEY = 14; // Invalid App Key扫茅,即:無效的AppKey參數(shù))
image.png

申請成功之后于微,這里會出現(xiàn)如下字樣:點擊就可以直接進(jìn)入消息推送平臺
image.png

如何使用消息推送平臺逗嫡,官方提供了詳細(xì)的文檔,其實使用起來也很簡單株依,
沒使用過的可以點擊這個鏈接直接進(jìn)入
官方教程:https://open.oppomobile.com/wiki/doc#id=10198

到此為止 我們就把準(zhǔn)備工作做好了驱证,以下就開始看代碼上的實現(xiàn)

第二部分介紹:
老規(guī)矩,下載官方demo恋腕,注意這里官方demo剛開始會運行不起來抹锄,又一個包下載不下來,我懷疑是OPPO內(nèi)部的maven庫無法訪問導(dǎo)致的吗坚,這個時候我們只需要去官網(wǎng)下載一個jar包導(dǎo)入進(jìn)來就OK了,筆者這里的jar包是 mcssdk-2.0.2.jar


image.png

SDK下載地址:https://open.oppomobile.com/wiki/doc#id=10201
直接下載 OPPO PUSH 客戶端 SDK 解壓導(dǎo)入jar,然后注視掉上面報錯這行代碼即可
// compile 'com.heytap.mcssdk:mcssdk:2.0.3-SNAPSHOT' 注視掉rebuild就好了

這個時候如果你想用官方demo測試祈远,肯定是不行的,盡管demo里面提供了appkey和appsecret商源,但是這個已經(jīng)過期了车份,并且由于applicationId重名不能被重新申請,那么如果想用官方demo測試就有一個蠢辦法牡彻,修改官方demo的applicationId和appname扫沼。這里筆者就修改了官方demo,這里我就不贅述如何修改包名了庄吼,貼個修改包名的鏈接:https://www.e-learn.cn/content/qita/804868

首先在需要集成推送的module中的Manifast中加入權(quán)限申請

<uses-permission android:name="com.coloros.mcs.permission.RECIEVE_MCS_MESSAGE"/>
<uses-permission android:name="com.heytap.mcs.permission.RECIEVE_MCS_MESSAGE"/>

注冊服務(wù)

        <service
            android:name="com.heytap.mcssdk.PushService"
            android:permission="com.coloros.mcs.permission.SEND_MCS_MESSAGE">
            <intent-filter>
                <action android:name="com.coloros.mcs.action.RECEIVE_MCS_MESSAGE" />
            </intent-filter>
        </service>

        <service android:name="com.heytap.mcssdk.AppPushService"
            android:permission="com.heytap.mcs.permission.SEND_PUSH_MESSAGE">
            <intent-filter>
                <action android:name="com.heytap.mcs.action.RECEIVE_MCS_MESSAGE"/>
            </intent-filter>
        </service>

在自己的application的onCreate()方法里面初始化

PushManager.getInstance().register(getApplicationContext(), AppParam.appKey, AppParam.appSecret, new OPPOPushCallback());//setPushCallback接口也可設(shè)置callback
PushManager.getInstance().requestNotificationPermission();//申請通知欄權(quán)限

其實OPPOPushCallback類就是集成自PushAdapter的一個類缎除,類里面主要關(guān)注onRegister()方法

@Override
    public void onRegister(int code, String s) {
        if (code == 0){
            Log.i("bqt", "OPPO【注冊成功,推送ID】=" + s);
            BaseData.PUSH_ID = s; // 即我們需要的registerID
        } else {
            //失敗之后的重試操作
//            PushManager.getInstance().getRegister();
            Log.i("bqt", "OPPO【注冊失敗总寻,msg=" + s + " 錯誤碼code : " + code);
        }

    }

這樣下來初步的推送就算已經(jīng)集成完成了

這里需要注意幾個地方:
1器罐,下面這行代碼在android8.0之前都是沒問題的,但是在Android8.0就存在適配問題渐行,會出現(xiàn)推送之后在8.0的機型上無法展示出通知的問題轰坊,這一點也可以從推送運營平臺的通知欄數(shù)據(jù)中看到

PushManager.getInstance().requestNotificationPermission();//申請通知欄權(quán)限

在消息推送平臺已經(jīng)提示了:

image.png

在官方問題技術(shù)問題列表中也有講到:(https://open.oppomobile.com/wiki/doc#id=10200
image.png

那么肯定要進(jìn)行通道的適配了铸董,其實官方也給了建議:

image.png

OPPO官方對此的講解https://open.oppomobile.com/wiki/doc#id=10289

其實很簡單,適配代碼:請在初始化時一并調(diào)用

//oppo 設(shè)置通知通道 兼容Android8.0及以上機型
    private static void notifyChannel(Application context) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            String channelId = "default";
            String channelName = "Default_Channel";
            String channelDescription = "this is default channel!";
            NotificationChannel mNotificationChannel = new NotificationChannel(channelId, channelName, NotificationManager.IMPORTANCE_DEFAULT);
            mNotificationChannel.setDescription(channelDescription);
            ((NotificationManager)context.getSystemService(Activity.NOTIFICATION_SERVICE)).createNotificationChannel(mNotificationChannel);
        }
    }

2肴沫,推送后的數(shù)據(jù)如何獲取
這是官方給出的答案:但是在應(yīng)用沒有被啟動的時候粟害,點擊推送的消息,這個方法不會被調(diào)用颤芬,所以應(yīng)該在onCreate()里面加上相同的方法
目前筆者無法獲取到推送消息的消息標(biāo)題和消息內(nèi)容悲幅,只能獲取到拓展字段的內(nèi)容,如果有看官能獲取到站蝠,請留言汰具,謝謝


image.png

解析參數(shù)的代碼如下:

// 取參數(shù)值
        if (getIntent().getExtras() != null) {
            // 取參數(shù)值
            Bundle bundle = getIntent().getExtras();
            Set<String> set = bundle.keySet();
            HashMap<String, String> hm = new HashMap<>();
            if (set != null) {
                for (String key : set) {
                    hm.put(key, bundle.getString(key));
                }
            }
            Log.e("NPL", "hm的值是:" + hm.toString());
         }

3,跳轉(zhuǎn)打開APP的方法有三種沉衣,其實官網(wǎng)都有介紹
1:Intent action 注意manifest中需要啟動的activity的action應(yīng)該與推送運營平臺保持一致
2:Activity manifest中需要啟動的activity的全類名


image.png

image.png

3:Intent Scheme URL 方式 manifest代碼:

      <activity android:name="com.yitong.mbank.ly.hn.uat.component.AboutActivity"
            android:screenOrientation="portrait"
            android:launchMode="singleTop"
            android:configChanges="orientation|screenSize"
            android:exported="true"> //封裝module的時候可以加上這個
            <intent-filter>
                <action android:name="android.intent.action.VIEW" />
                <category android:name="android.intent.category.BROWSABLE" />
                <category android:name="android.intent.category.DEFAULT" />
               <data android:scheme="https" /> //打開網(wǎng)頁時需要
               <data android:scheme="http" /> //打開網(wǎng)頁時需要
                <data
                    android:host="pushtest"
                    android:path="/message"
                    android:scheme="command" />
            </intent-filter>
        </activity>

官網(wǎng)中沒有提及要設(shè)置path郁副,之所以寫這個 主要是因為小米和華為都支持該種方式作為推送打開應(yīng)用的一種方式,所以豌习,我們這里為了跟其他平臺的兼容存谎,故添加了path

推送平臺應(yīng)為:
點擊動作 選擇 打開應(yīng)用內(nèi)頁

Intent Scheme URL 值為: command://pushtest/message?key=value&key1=value1

推送后在AboutActivity的onCreate()中:

String intentUrl = intent.toUri(Intent.URI_INTENT_SCHEME);
Log.i("test"," == " + intentUrl);
//打印出來的內(nèi)容為:
// intent://pushtest/message?key=value&key1=value1#Intent;scheme=command;launchFlags=0x30000000;package=com.yitong.mbank.ly.hn.uat;component=com.yitong.mbank.ly.hn.uat/.component.AboutActivity;end

最后解析這個打印出來的IntentUri就可以拿到對應(yīng)的參數(shù)(key=value&key1=vaule1)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市肥隆,隨后出現(xiàn)的幾起案子既荚,更是在濱河造成了極大的恐慌,老刑警劉巖栋艳,帶你破解...
    沈念sama閱讀 216,496評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件恰聘,死亡現(xiàn)場離奇詭異,居然都是意外死亡吸占,警方通過查閱死者的電腦和手機晴叨,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來矾屯,“玉大人兼蕊,你說我怎么就攤上這事〖希” “怎么了孙技?”我有些...
    開封第一講書人閱讀 162,632評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長排作。 經(jīng)常有香客問我牵啦,道長,這世上最難降的妖魔是什么妄痪? 我笑而不...
    開封第一講書人閱讀 58,180評論 1 292
  • 正文 為了忘掉前任哈雏,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘裳瘪。我一直安慰自己履因,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,198評論 6 388
  • 文/花漫 我一把揭開白布盹愚。 她就那樣靜靜地躺著,像睡著了一般站故。 火紅的嫁衣襯著肌膚如雪皆怕。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,165評論 1 299
  • 那天西篓,我揣著相機與錄音愈腾,去河邊找鬼。 笑死岂津,一個胖子當(dāng)著我的面吹牛虱黄,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播吮成,決...
    沈念sama閱讀 40,052評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼橱乱,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了粱甫?” 一聲冷哼從身側(cè)響起泳叠,我...
    開封第一講書人閱讀 38,910評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎茶宵,沒想到半個月后危纫,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,324評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡乌庶,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,542評論 2 332
  • 正文 我和宋清朗相戀三年种蝶,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片瞒大。...
    茶點故事閱讀 39,711評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡螃征,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出糠赦,到底是詐尸還是另有隱情会傲,我是刑警寧澤,帶...
    沈念sama閱讀 35,424評論 5 343
  • 正文 年R本政府宣布拙泽,位于F島的核電站淌山,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏顾瞻。R本人自食惡果不足惜泼疑,卻給世界環(huán)境...
    茶點故事閱讀 41,017評論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望荷荤。 院中可真熱鬧退渗,春花似錦移稳、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,668評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至翻翩,卻和暖如春都许,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背嫂冻。 一陣腳步聲響...
    開封第一講書人閱讀 32,823評論 1 269
  • 我被黑心中介騙來泰國打工胶征, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人桨仿。 一個月前我還...
    沈念sama閱讀 47,722評論 2 368
  • 正文 我出身青樓睛低,卻偏偏與公主長得像,于是被迫代替她去往敵國和親服傍。 傳聞我的和親對象是個殘疾皇子钱雷,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,611評論 2 353

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

  • 前言 在Android開發(fā)中,消息推送功能的使用非常常見吹零。 推送消息截圖 為了降低開發(fā)成本急波,使用第三方推送是現(xiàn)今較...
    BillyLu1994閱讀 4,413評論 0 2
  • 點擊查看原文 Web SDK 開發(fā)手冊 SDK 概述 網(wǎng)易云信 SDK 為 Web 應(yīng)用提供一個完善的 IM 系統(tǒng)...
    layjoy閱讀 13,758評論 0 15
  • 由于谷歌服務(wù)在國內(nèi)不能用,Android 的推送真是一大痛點瘪校,但也推動了國內(nèi)一批做第三方服務(wù)的廠商澄暮。第三方推送...
    U卡技術(shù)閱讀 6,636評論 1 10
  • 版本記錄 前言 ??現(xiàn)在很多APP都有推送功能,其中極光推送就是很多APP的首選阱扬。我們最近的幾個APP也是用的極光...
    刀客傳奇閱讀 8,383評論 0 8
  • 海浪輕輕的拍打著海岸泣懊, 泛起層層浪花, 一朵朵簇?fù)碇?開出漣漪點點麻惶! 海面波光粼粼馍刮, 夕陽西下, 微笑著揮手告別...
    五月的罌粟閱讀 149評論 0 1