flutter: fcm ios push notifications doesn't work in release mode

雨燕双飞 提交于 2021-02-07 12:57:59

问题


I have bound my flutter-iOS app to firebase and i'm also using firebase-messaging and cloud functions for sending notifications via subscribing to topics, i'm using the APNs push notifications key of apple developer account. when i use the option runner>flutter run main.dart in release mode to build my app on my phone, fcm notifications doesn't work anymore, while it works in development mode, anyone can help me fix this?

this is my index.json code:

const functions = require('firebase-functions');
const admin = require('firebase-admin');

admin.initializeApp(functions.config().firebase);
 
var newData;
 
exports.messageTrigger = functions.firestore.document('notifications/{notificationsId}').onCreate(async (snapshot, context) => {
newData = snapshot.data();
const payload = {
    notification: {
        title: newData.title,
        body: newData.body,
        sound: 'default'
    },
    
        data: {
      click_action: 'FLUTTER_NOTIFICATION_CLICK',
      message: newData.title,
    }

};

if (newData.language === 'english'){
    await admin.messaging().sendToTopic('english', payload);
}
else if (newData.language === 'arabic'){
    await admin.messaging().sendToTopic('arabic', payload);
}
else if (newData.language === 'kurdish'){
    await admin.messaging().sendToTopic('kurdish', payload);
}
});

hence package.json:

{
  "name": "functions",
  "description": "Cloud Functions for Firebase",
  "scripts": {
    "lint": "eslint .",
    "serve": "firebase emulators:start --only functions",
    "shell": "firebase functions:shell",
    "start": "npm run shell",
    "deploy": "firebase deploy --only functions",
    "logs": "firebase functions:log"
  },
  "engines": {
    "node": "10"
  },
  "dependencies": {
    "firebase-admin": "^8.10.0",
    "firebase-functions": "^3.6.1"
  },
  "devDependencies": {
    "eslint": "^5.12.0",
    "eslint-plugin-promise": "^4.0.1",
    "firebase-functions-test": "^0.2.0"
  },
  "private": true
}

回答1:


My project got the same issue. Combined two solutions I found, it finally works. (firebase_messaging 7.0.3)

As for debug mode, you don't need these.

Step 1: Edit AppDelegate.swift

import UIKit
import Flutter

@UIApplicationMain
@objc class AppDelegate: FlutterAppDelegate {
  override func application(
    _ application: UIApplication,
    didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
  ) -> Bool {
    if #available(iOS 10.0, *) {
      UNUserNotificationCenter.current().delegate = self as? UNUserNotificationCenterDelegate
    }
    
    GeneratedPluginRegistrant.register(with: self)

    application.registerForRemoteNotifications()

    return super.application(application, didFinishLaunchingWithOptions: launchOptions)
  }
}

Step 2: Edit ios/Runner/Info.plist. Add this:

<key>FirebaseAppDelegateProxyEnabled</key>
<string>NO</string>



回答2:


After update firebase_messaging to 7.0.0 I had the same problem. I added application.registerForRemoteNotifications() in my AppDelegate.swift and it worked!




回答3:


I have the same issue. Looks like iOS release require additional notification params

To check that notification works you could try to send message directly from the firebase console.

Cloud Messaging -> Send your first message -> Enter notification title and text -> Send test message -> Enter your device token -> Test

To obtain device token you can use print(await FirebaseMessaging().getToken());

To check release logs connect the device and open Xcode -> Window -> Devices and Simulators -> Open Console

If it works you could try to add this params:

const payload = {
 notification: {
    title: newData.title,
    body: newData.body,
    sound: 'default'
 },
 data: {
    click_action: 'FLUTTER_NOTIFICATION_CLICK',
    message: newData.title,
 },
 apns: {
    headers: { "apns-priority": "5" },
    payload: {
            aps: {
                contentAvailable: true,
                category: "NEW_MESSAGE_CATEGORY"
            }
        }
    },
};

But I'm not sure which param helps: "apns-priority" or contentAvailable.



来源:https://stackoverflow.com/questions/63782395/flutter-fcm-ios-push-notifications-doesnt-work-in-release-mode

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!