Flutter集成極光 全踩坑

[toc]

Flutter集成極光 全踩坑

普通集成(非付費(fèi)版本智哀,走極光通道)

普通集成沒有什么難度,直接走極光的plugin就可以了:

導(dǎo)入對應(yīng)的包

插件包地址

直接yaml依賴荧恍,get一波

上報(bào)RegisterID

  _initRegisterID(phoneModel) {
    jPush.getRegistrationID().then((rid) {
      if (rid != null && rid.isNotEmpty == true) {
        print('---->rid:${rid}');
        var params = {};
        params["registrationId"] = rid;
        params["phoneModel"] = Platform.isAndroid ? 'Android' : 'IOS';
        LoginRepository.reportRegisterId(params);
      }
    });
  }

也可以使用其他的方式瓷叫,更常見的是設(shè)置別名之類的方式來推送。

處理對應(yīng)的回調(diào)

  jPush.applyPushAuthority(
        NotificationSettingsIOS(sound: true, alert: true, badge: true));
    try {
      jPush.addEventHandler(
          onReceiveNotification: (Map<String, dynamic> message) async {
        print('---->onReceiveNotification:$message');
      }, onOpenNotification: (Map<String, dynamic> message) async {
        print('1111---->接收到推送:$message');
       /// do some things
      });
    } on Exception {
      print("---->獲取平臺版本失敗");
    }

遇到的一些問題

這樣基本就是已經(jīng)集成了送巡,但是也會有一些問題:

  1. ios點(diǎn)擊不觸發(fā)事件
  2. ios殺死進(jìn)程后獲取不到extras
  3. 更多問題歡迎來到issues圍觀

而且pub上的極光好像不是最新的摹菠,依賴了

  jpush_flutter:
    git:
      url: git://github.com/jpush/jpush-flutter-plugin.git
      ref: master

問題1得到了解決。

但是其他問題依然存在骗爆,且4伟薄!

<img src="/Users/ly/Library/Application Support/typora-user-images/image-20200723145056878.png" alt="image-20200723145056878" style="zoom:50%;" />

付費(fèi)廠商通道集成

重要的事情說三次:

plugin是基礎(chǔ)免費(fèi)版本摘投,沒有付費(fèi)版本V蠊选!O簟幸撕!

plugin是基礎(chǔ)免費(fèi)版本,沒有付費(fèi)版本M獗邸W!宋光!

plugin是基礎(chǔ)免費(fèi)版本貌矿,沒有付費(fèi)版本!W锛选9渎!

付費(fèi)版本需要自己實(shí)現(xiàn)plugin菇民,

基礎(chǔ)集成

基礎(chǔ)的廠商集成需要coder 在其中的Android項(xiàng)目中手動集成各個廠商的sdk:

//    小米極光推送sdk
    implementation 'cn.jiguang.sdk.plugin:xiaomi:3.6.8'
//    華為推送
    implementation 'com.huawei.hms:push:4.0.2.300'
    implementation 'cn.jiguang.sdk.plugin:huawei:3.6.8'
//    魅族推送
    implementation 'cn.jiguang.sdk.plugin:meizu:3.6.8'
//    vivo
    implementation 'cn.jiguang.sdk.plugin:vivo:3.6.8'
//    oppo
    implementation 'cn.jiguang.sdk.plugin:oppo:3.6.8'
    implementation fileTree(include: ['*.jar'], dir: 'libs')

基礎(chǔ)集成的文檔可以參考這部分:

各個廠商集成文檔

插件集成

因?yàn)槭亲邚S商渠道尽楔,所以集成了之后,大部分的推送消息都不會走上面的callback第练,除了像魅族這樣沒排面的阔馋,都集成了sdk還走普通通道(狗頭),

極光是希望開發(fā)者實(shí)現(xiàn)自己的插件娇掏,在原生端接收到推送消息呕寝,橋接到futter端進(jìn)行消費(fèi):

  1. 極光發(fā)送推送消息
  2. 中轉(zhuǎn)ac被拉起,拿到對應(yīng)的推送字段
  3. 跳轉(zhuǎn)到mainActivity婴梧,并把數(shù)據(jù)傳遞過去下梢,MainActivity拿到數(shù)據(jù)通過MethodChannel傳遞到flutter端
  4. flutter端進(jìn)行消費(fèi)處理客蹋。

OpenClickActivity

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
//        mTextView = new TextView(this);
//        setContentView(mTextView);
//        handleOpenClick();
        getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
        Intent intent = new Intent(this, MainActivity.class);
        intent.setData(getIntent().getData());
        if (getIntent().getExtras() != null) {
            intent.putExtras(getIntent().getExtras());
        }
        startActivity(intent);
        finish();
    }

MainActivity

private void handleOpenClick(MethodChannel channel, Intent intent) {

        String data = null;
        //獲取華為平臺附帶的jpush信息
        if (intent.getData() != null) {
                data = intent.getData().toString();
        }

        //獲取fcm、oppo孽江、vivo讶坯、華碩、小米平臺附帶的jpush信息
        if(TextUtils.isEmpty(data) && intent.getExtras() != null){
            data = intent.getExtras().getString("JMessageExtra");
        }

        if (TextUtils.isEmpty(data)) return;
        try {
            JSONObject jsonObject = new JSONObject(data);
            String msgId = jsonObject.optString(KEY_MSGID);
            byte whichPushSDK = (byte) jsonObject.optInt(KEY_WHICH_PUSH_SDK);
            String title = jsonObject.optString(KEY_TITLE);
            String content = jsonObject.optString(KEY_CONTENT);
            String extras = jsonObject.optString(KEY_EXTRAS);

            final Handler mHandler = new Handler();
            Runnable r = () -> {
                //do something
                Map<String, String> map = new HashMap<>();
                map.put("msgId", msgId);
                map.put("whichPushSDK", whichPushSDK + "");
                map.put("title", title);
                map.put("content", content);
                map.put("extras", extras);
//                Toast.makeText(MainActivity.this, map.toString(), Toast.LENGTH_SHORT).show();
                channel.invokeMethod("notifyclick", map);
            };
            //主線程中調(diào)用:
            mHandler.postDelayed(r, 100);//延時100毫秒
        } catch (JSONException e) {
            Log.w(TAG, "parse notification error");
        }
    }

Flutter

 Future<Null> _handleMethod(MethodCall call) async {
    print("_handleMethod: ${call.method}");

    switch (call.method) {
      case "notifyclick":
        return notifyclick(call.arguments.cast<String, dynamic>());

      default:
        throw new UnsupportedError("Unrecognized Event");
    }
  }

  Future<dynamic> notifyclick(Map<String, dynamic> message) async {
    print('1111---->接收到推送:$message');
    String pushType;
    String afterSalesId;
    String appMessageId;
    String extra=message["extras"];
    print(extra);
    JpushModel jpushModel=JpushModel.fromJson(jsonDecode(extra));

    pushType=jpushModel?.pushType;
    afterSalesId=jpushModel?.afterSalesId;
    appMessageId=jpushModel?.appMessageId;
    if (pushType == "stationMessage") {
      print('----------appMessageId= $appMessageId');
      Navigator.push(
          context,
          MaterialPageRoute(
              builder: (context) => MessageDetailPage(
                    messageCellList:
                        MessageCellList(appMessageId: int.parse(appMessageId)),
                  )));
    } else {
//      if (Platform.isAndroid) {
        String _jumpUrl =
            JPushConf.getJumpUrlByJpush(pushType, afterSalesId: afterSalesId);
        WechatUtils().launchMiniPro(_jumpUrl);
//      } else {
//        WechatUtils().launchMiniPro('${WechatMiniUrl.choose_url}');
//      }
    }

AndroidManifest

   <activity android:name=".OpenClickActivity"
            android:theme="@android:style/Theme.Translucent.NoTitleBar"
            android:launchMode="singleTask"
            android:screenOrientation="portrait"
            android:exported="true">
            <intent-filter>
                <data android:path="/ypath" android:host="yhost" android:scheme="yscheme"></data>
                <action android:name="android.intent.action.VIEW"/>
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>

        </activity>

        <!-- Don't delete the meta-data below.
             This is used by the Flutter tool to generate GeneratedPluginRegistrant.java -->
        <meta-data
            android:name="flutterEmbedding"
            android:value="2" />

需要注意的點(diǎn)

  1. 中轉(zhuǎn)ac的問題
    如果中轉(zhuǎn)ac配置出錯的話岗屏,點(diǎn)擊通知可以拉起app辆琅,但是不會獲取到extras,這個很惡心这刷,對于中轉(zhuǎn)ac在AndroidManifest中的配置婉烟,千萬不要配錯,不然很容易拉起了拿不到數(shù)據(jù)暇屋。

  2. 需要后臺配合

    之前版本的服務(wù)器sdk并沒有提供uri_activity這個配置似袁,如果發(fā)現(xiàn)沒有這個字段,更新下版本:<img src="/Users/ly/Library/Application Support/typora-user-images/image-20200723153625161.png" alt="image-20200723153625161" style="zoom:50%;" />

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末咐刨,一起剝皮案震驚了整個濱河市昙衅,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌所宰,老刑警劉巖绒尊,帶你破解...
    沈念sama閱讀 217,406評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異仔粥,居然都是意外死亡婴谱,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評論 3 393
  • 文/潘曉璐 我一進(jìn)店門躯泰,熙熙樓的掌柜王于貴愁眉苦臉地迎上來谭羔,“玉大人,你說我怎么就攤上這事麦向∥谅悖” “怎么了?”我有些...
    開封第一講書人閱讀 163,711評論 0 353
  • 文/不壞的土叔 我叫張陵诵竭,是天一觀的道長话告。 經(jīng)常有香客問我,道長卵慰,這世上最難降的妖魔是什么沙郭? 我笑而不...
    開封第一講書人閱讀 58,380評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮裳朋,結(jié)果婚禮上病线,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好送挑,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,432評論 6 392
  • 文/花漫 我一把揭開白布绑莺。 她就那樣靜靜地躺著,像睡著了一般惕耕。 火紅的嫁衣襯著肌膚如雪纺裁。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,301評論 1 301
  • 那天赡突,我揣著相機(jī)與錄音对扶,去河邊找鬼区赵。 笑死惭缰,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的笼才。 我是一名探鬼主播漱受,決...
    沈念sama閱讀 40,145評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼骡送!你這毒婦竟也來了昂羡?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,008評論 0 276
  • 序言:老撾萬榮一對情侶失蹤摔踱,失蹤者是張志新(化名)和其女友劉穎虐先,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體派敷,經(jīng)...
    沈念sama閱讀 45,443評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡蛹批,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,649評論 3 334
  • 正文 我和宋清朗相戀三年顺又,在試婚紗的時候發(fā)現(xiàn)自己被綠了纲仍。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,795評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡被啼,死狀恐怖试躏,靈堂內(nèi)的尸體忽然破棺而出猪勇,到底是詐尸還是另有隱情,我是刑警寧澤颠蕴,帶...
    沈念sama閱讀 35,501評論 5 345
  • 正文 年R本政府宣布泣刹,位于F島的核電站,受9級特大地震影響犀被,放射性物質(zhì)發(fā)生泄漏椅您。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,119評論 3 328
  • 文/蒙蒙 一弱判、第九天 我趴在偏房一處隱蔽的房頂上張望襟沮。 院中可真熱鬧,春花似錦、人聲如沸开伏。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽固灵。三九已至捅伤,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間巫玻,已是汗流浹背丛忆。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留仍秤,地道東北人熄诡。 一個月前我還...
    沈念sama閱讀 47,899評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像诗力,于是被迫代替她去往敵國和親凰浮。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,724評論 2 354