颤振: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 推送通知在发布模式下不起作用的主要内容,如果未能解决你的问题,请参考以下文章