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

Posted

技术标签:

【中文标题】颤振:fcm ios 推送通知在发布模式下不起作用【英文标题】:flutter: fcm ios push notifications doesn't work in release mode 【发布时间】: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 发布模式 【参考方案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() 并且它起作用了!

【讨论】:

你能编辑和编写完整的应用程序委托吗? 无论我把它放在我的 appdelegate 中,它都会给我一个错误 我的也在 Objective C 中 @azheen gist.github.com/kabazyba/cbc381aa504ab63a7de893236f77e9d2【参考方案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

【讨论】:

以上是关于颤振:fcm ios 推送通知在发布模式下不起作用的主要内容,如果未能解决你的问题,请参考以下文章

IOS unregisterForRemoteNotifications 在飞行模式下不起作用

Flutter FCM 推送通知不起作用

quickblox 推送通知在生产模式下不起作用

Flutter FCM Ios 未在设备上显示

推送通知在沙盒模式下不起作用

使用离子电容器的 FCM 推送通知在 IOS 中不起作用