【问题标题】:flutter: fcm ios push notifications doesn't work in release mode颤振:fcm ios 推送通知在发布模式下不起作用
【发布时间】:2020-12-26 03:50:22
【问题描述】:

我已将我的 Flutter-iOS 应用程序绑定到 firebase,并且我还使用 firebase-messaging 和云功能通过订阅主题来发送通知,我正在使用苹果开发者帐户的 APNs 推送通知密钥。当我使用选项 runner>flutter 在发布模式下运行 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);
}
});

因此 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
}

【问题讨论】:

  • 确保您创建的推送通知认证支持生产。
  • 你好,谢谢,我还没有在appstore上发布,只是在我的手机上发布了它,那也需要证书吗?
  • 我没有使用推送通知证书,我正在使用 APNS 密钥
  • 请发给我firebase云消息设置页面截图。您在哪里添加了 apn
  • 如何发送?我已将 apns 密钥正确上传到 firebase,它在 android 调试和发布以及 ios 调试上运行良好,唯一的问题是 ios 发布模式

标签: flutter dart firebase-cloud-messaging release


【解决方案1】:

我的项目遇到了同样的问题。结合我找到的两个解决方案,它终于可以工作了。 (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)
  }
}

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

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

【讨论】:

  • 我有类似的问题,只是添加这个 application.registerForRemoteNotifications() 解决了我的问题
  • 同样的问题 application.registerForRemoteNotifications() 解决了我的问题
【解决方案2】:

将 firebase_messaging 更新到 7.0.0 后,我遇到了同样的问题。我在 AppDelegate.swift 中添加了 application.registerForRemoteNotifications() 并且它起作用了!

【讨论】:

【解决方案3】:

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

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

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

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

要检查发布日志,请连接设备并打开 Xcode -> Window -> Devices and Simulators -> Open Console

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

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"
            }
        }
    },
};

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-14
    • 2021-12-29
    • 2018-03-05
    • 2018-04-24
    • 1970-01-01
    • 2021-05-04
    • 2022-11-17
    • 2018-02-14
    相关资源
    最近更新 更多