iT邦幫忙

第 12 屆 iT 邦幫忙鐵人賽

DAY 26
1
Mobile Development

iOS Developer Learning Flutter系列 第 26

iOS Developer Learning Flutter. Lesson25 Push Notification

本集透過FCM火力地堡firebase_messaging套件 來實作推播功能

Today Preview

1. 設定階段(iOS)

就是最麻煩的階段= =

1.1 Xcode設定

  1. 從AS裡可以直接開啟Xcode

  2. 從綠圈處加入Capability
    選擇Push Notifications 跟 Background Modes(勾選Background fetch 跟 Remote notifications)

1.2 新增APP ID

詳細說明請見

這部分大家應該都是老手了
就是在蘋果開發者網站上加入你的App

1.3 新增推播key

詳細說明請見

這部分可能跟以前不太一樣
我以前還在用.p12檔(藍圈)
現在好像都推.p8檔了(紫圈)

  1. 點加號後進入下頁
  2. 輸完名字勾完APNs後, 右上角繼續
  3. 然後就可以下載authentication key了(.p8)
    注意: 只能下載一次, 不見的話⋯⋯⋯⋯⋯⋯(好像生一把新的就好了?)

1.4 Firebase開新專案

這邊新增一個
填入bundle ID

1.5 Firebase新增iOS應用程式

在剛剛新增的專案裡增加iOS(之後還要加入Android)
注意這邊Firebase引導的是原生的作法
做完第二步之後就可以跳到第五步按完成了

1.6 把推播key上傳給Firebase

詳細說明請見

  1. 從左上角專案設定的地方進入Cloud Messaging

  2. 藍色就是以前傳p12的地方, 現在要點紫色的

  3. 最後一步了 緊不緊張? 興不興奮?


金鑰ID就是前面1.3.3我用紅方塊檔住的地方
團隊ID就是developer.apple.com的右上角

2. 設定階段(Android)

//TODO: <=第11大謊言

3. 寫扣階段

就抄一下人家的就好啦

import 'package:firebase_messaging/firebase_messaging.dart';

class PushNotificationsManager {

  PushNotificationsManager._();

  factory PushNotificationsManager() => _instance;

  static final PushNotificationsManager _instance = PushNotificationsManager._();

  final FirebaseMessaging _firebaseMessaging = FirebaseMessaging();
  bool _initialized = false;

  Future<void> init() async {
    if (!_initialized) {
      // For iOS request permission first.
      _firebaseMessaging.requestNotificationPermissions();
      _firebaseMessaging.configure();

      // For testing purposes print the Firebase Messaging token
      String token = await _firebaseMessaging.getToken();
      print("FirebaseMessaging token: $token");

      _initialized = true;
    }
  }
}

4. 推播階段

  1. 從這邊進去

  2. 享受你的成果吧

5. 接收階段

  1. 記得, 還是用實機
  2. 目前step3這種寫法, App執行中是收不到的
    請參考
_firebaseMessaging.configure(
      onBackgroundMessage: myBackgroundMessageHandler,
      onMessage: (Map<String, dynamic> message) async {
        print("onMessage: $message");
        _showItemDialog(message);
      },
      onLaunch: (Map<String, dynamic> message) async {
        print("onLaunch: $message");
        _navigateToItemDetail(message);
      },
      onResume: (Map<String, dynamic> message) async {
        print("onResume: $message");
        _navigateToItemDetail(message);
      },
    );

6. 寫在最後

  1. 溫馨提醒

  2. 模擬器測推播
    不是說Xcode 11.4 模擬器可以收推播了嗎?
    看來只能在本地測測
    不過我欣賞這位老兄的氣魄XD

  3. 今天的圖比過去20幾天加起來還多.......


本集內容Android版請見:iOS Developer Learning Android. Lesson 25

下集預告:Local Authentication


上一篇
iOS Developer Learning Flutter. Lesson24 Local Storage + URL Launcher
下一篇
iOS Developer Learning Flutter. Lesson26 Biometric
系列文
iOS Developer Learning Flutter30

尚未有邦友留言

立即登入留言