颤振:fcm ios 推送通知在发布模式下不起作用

azh*_*een 7 release dart flutter firebase-cloud-messaging

我已将我的 flutter-iOS 应用程序绑定到 firebase,我还使用 firebase-messaging 和云功能通过订阅主题发送通知,我正在使用苹果开发者帐户的 APNs 推送通知键。当我在发布模式下使用选项 runner>flutter run main.dart 在我的手机上构建我的应用程序时,fcm 通知不再工作,而它在开发模式下工作,任何人都可以帮我解决这个问题?

这是我的 index.json 代码:

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);
}
});
Run Code Online (Sandbox Code Playgroud)

因此 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
}
Run Code Online (Sandbox Code Playgroud)

小智 5

我的项目遇到了同样的问题。结合我发现的两种解决方案,它终于奏效了。(firebase_messaging 7.0.3)

至于调试模式,你不需要这些。

第 1 步:编辑 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)
  }
}
Run Code Online (Sandbox Code Playgroud)

第二步:编辑ios/Runner/Info.plist。添加这个:

<key>FirebaseAppDelegateProxyEnabled</key>
<string>NO</string>
Run Code Online (Sandbox Code Playgroud)

  • 我有类似的问题,只需添加此 application.registerForRemoteNotifications() 就解决了我的问题 (2认同)

evg*_*ein 0

我有同样的问题。看起来 iOS 版本需要额外的通知参数

要检查通知是否有效,您可以尝试直接从 firebase 控制台发送消息。

云消息传递 -> 发送您的第一条消息 -> 输入通知标题和文本 -> 发送测试消息 -> 输入您的设备令牌 -> 测试

要获取设备令牌,您可以使用print(await FirebaseMessaging().getToken());

要检查发布日志,请连接设备并打开 Xcode -> 窗口 -> 设备和模拟器 -> 打开控制台

如果有效,您可以尝试添加此参数:

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"
            }
        }
    },
};
Run Code Online (Sandbox Code Playgroud)

但我不确定哪个参数有帮助:"apns-priority"contentAvailable