标签: firebase-cloud-messaging

Firebase 立即获取通知数据

我是 firebase 控制台发送通知。它直接向系统托盘发送通知。我想在用户点击它们时从它们那里获取有效负载。

当您的应用程序在后台运行时,Android 会将通知消息定向到系统托盘。默认情况下,用户点击通知会打开应用程序启动器。

这包括包含通知和数据负载的消息(以及从通知控制台发送的所有消息)。在这些情况下,通知将传递到设备的系统托盘,并且数据负载将在启动器活动的意图的附加内容中传递。

https://firebase.google.com/docs/notifications/android/console-audience

我能够获取从控制台发送的通知 如何从我的意图之外获取通知负载?

android android-intent firebase firebase-cloud-messaging firebase-notifications

0
推荐指数
1
解决办法
2793
查看次数

Firebase Cloud Messaging:处理应用服务器中的令牌刷新

我正在尝试实现一个通知系统,您可以在其中订阅另一个用户(不是 Firebase 主题),并在该用户发布内容时获取推送通知。

为此,我决定使用设备组注册令牌,以便用户可以将推送通知发送到他/她登录的每个设备。

目前,用户可以订阅另一个用户,还可以使用通知键接收他登录的每个设备的推送通知。为此,我每次用户登录时都会获取设备的注册令牌,并使用以下结构将其存储在数据库(应用程序服务器)中。

用户

  • 用户 ID(主键)
  • 通知键名称
  • 通知键

设备

  • 用户 ID (FK)
  • 注册令牌

但是,我无法弄清楚如何管理应用程序服务器中的令牌刷新。

考虑这种情况:

1)user_1首次登录设备。

2) 使用registration_token_1创建设备组(在FCM 和应用程序服务器中)。

3)user_1卸载应用并重新安装(令牌刷新)。

4) user_1 重新登录。

5) App Server 将refresh_token_1添加到user_1,他现在有2 个令牌,旧的和新的。

6) user_1注销和user_2登录同一设备,refresh_token_1转移给user_2。

7) FCM 删除 user_1 的设备组,因为 user_1不再具有任何注册令牌。但 user_1 在应用服务器中仍然拥有 notification_key 和带有 Registration_token_1 的设备。

8) user_1 无法登录,因为应用程序服务器认为他已经拥有设备组并尝试将刷新令牌_1 添加到 FCM 中不存在的 notification_key,并收到错误代码 400“通知密钥不存在”。

我对此有几个问题:

如果刷新令牌,是否有办法从 FCM 检索旧令牌?这样,应用程序服务器可以用新令牌替换旧令牌,而无需将令牌与设备标识符配对,如果标识符在卸载/恢复出厂设置等情况下不存在,则这似乎不可靠

您能否推荐一种更好的方法来将用户(通知键)与应用程序服务器中的注册令牌进行映射?

编辑 我已经阅读了一些其他线程,并找到了一种可能的解决方案,其形式是将注册令牌与设备标识符配对,因此当刷新令牌时,我可以查找设备标识符并替换/删除令牌。现在,我不确定 iOS 和 Android 是否都具有持久标识符,这些标识符是否可以在应用程序卸载、数据擦除和恢复出厂设置之外存在……

firebase google-cloud-messaging firebase-cloud-messaging

0
推荐指数
1
解决办法
2255
查看次数

向除一名用户之外的所有用户发送 Android 推送通知

我正在使用 firebase,并且有一个应用程序需要向所有用户发送通知。因此,为了实现这一目标,我创建了一个主题 allUsers,每个设备都订阅该主题。现在,如果我向该主题发送推送通知,每个设备都会收到它。我想排除一台设备,该设备间接向 /topics/allUsers 创建推送通知。

这可以实现吗?

android firebase firebase-cloud-messaging

0
推荐指数
1
解决办法
2671
查看次数

Firebase 通知 - 如何设置通知语言?

我想根据设备的语言向设备发送通知。我的第一个想法是为服务器端可用的每个区域设置创建推送,并让 Firebase 完成所有调度工作。

但为此我需要为每次推送设置区域设置。

我还没有找到任何可用的参数,所以我想知道我是否正确或者是否需要更改我的设计。如果我必须这样做,我该怎么办?

java firebase-cloud-messaging firebase-notifications

0
推荐指数
1
解决办法
2094
查看次数

如何启用推送通知 (FCM) 的声音?

我有一个 Ionic 应用程序和一个使用 Java 的 Mule ESB。当我从在线控制台发送推送通知时,我可以选择启用声音。我怎样才能在Java中实现这一点?

我目前用它来定义我的推送消息:

    Message message = Message.builder()
            .putData("title", title)
            .putData("body", body)
            .setTopic(topic)
            .build();
Run Code Online (Sandbox Code Playgroud)

这工作正常,发送通知时没有任何声音。标题和正文是我正在使用的两个变量。

为了添加声音我尝试过

.putData("sound", "default")
Run Code Online (Sandbox Code Playgroud)

以及一些类似的东西

.setApnsConfig(ApnsConfig.builder().setAps(Aps.builder().setSound("default").build()).build())
Run Code Online (Sandbox Code Playgroud)

.setApnsConfig(ApnsConfig.builder().setAps(Aps.builder().putCustomData("sound", "default").build()).build())
Run Code Online (Sandbox Code Playgroud)

两者都没有任何成功。如何实现与 Java 中的控制台相同的声音选项?

java firebase-cloud-messaging

0
推荐指数
1
解决办法
1434
查看次数

使用 FCM 推送通知时颤动中的 Kotlin 文件错误

我想在 flutter 中使用 firebase_messaging 推送通知。在文档中有 Application.java 文件,但我的 flutter 项目使用 kotlin 文件格式。如何将此 java 代码更改为 kotlin 类型:


import io.flutter.app.FlutterApplication;
import io.flutter.plugin.common.PluginRegistry;
import io.flutter.plugin.common.PluginRegistry.PluginRegistrantCallback;
import io.flutter.plugins.GeneratedPluginRegistrant;
import io.flutter.plugins.firebasemessaging.FlutterFirebaseMessagingService;

public class Application extends FlutterApplication implements PluginRegistrantCallback {
  @Override
  public void onCreate() {
    super.onCreate();
    FlutterFirebaseMessagingService.setPluginRegistrant(this);
  }

  @Override
  public void registerWith(PluginRegistry registry) {
    GeneratedPluginRegistrant.registerWith(registry);
  }
}


Error is this: Expecting a top level declaration

Run Code Online (Sandbox Code Playgroud)

java kotlin flutter firebase-cloud-messaging

0
推荐指数
1
解决办法
814
查看次数

快速更新 Firebase 最新版本后出现错误“在范围内找不到“消息”

我最近通过 podfile将 Firebase 更新到最新的 Firebase 版本 7.3.1。现在我收到此错误并且 Xcode 因错误而失败:

Error 'Cannot find 'Messaging' in scope' 
Cannot find type 'MessagingRemoteMessage' in scope
Run Code Online (Sandbox Code Playgroud)

Xcode 版本:12.0

斯威夫特 5

我的代码是

extension AppDelegate : MessagingDelegate {
    //MARK:- Firebase Delegate
    
    func messaging(_ messaging: Messaging, didReceiveRegistrationToken fcmToken: String) {
        print("Firebase registration token: \(fcmToken)")
    }
    
    func messaging(_ messaging: Messaging, didReceive remoteMessage: MessagingRemoteMessage) {
        print("Received data message: \(remoteMessage.appData)")
    }
}
Run Code Online (Sandbox Code Playgroud)

我的豆荚如下所示以供参考

  pod 'Firebase/Core'
  pod 'Firebase/Messaging'
  pod 'Firebase/DynamicLinks'
  pod 'Firebase/Crashlytics'
Run Code Online (Sandbox Code Playgroud)

我只是尝试使用完全移除豆荚

cocoapods-deintegrate cocoapods-clean
Run Code Online (Sandbox Code Playgroud)

但没有运气!

在此处输入图片说明

我经常更新我的豆荚,我看不出是什么会导致这种重大变化。

有谁知道是什么原因?

firebase swift firebase-cloud-messaging podfile

0
推荐指数
2
解决办法
4887
查看次数

应用程序终止时,Firebase 推送通知回调不起作用

所以我更新了firebase_messaging并且我不得不更改我的代码,因为FirebaseMessagin.configure()它已被弃用,现在当我收到通知并单击通知时,它不会打开另一个屏幕。

这就是我实现通知的方式:

Future<void> _firebaseMessagingBackgroundHandler(RemoteMessage message) async {
  await Firebase.initializeApp();
  print('Handling a background message ${message.messageId}');
}
const AndroidNotificationChannel channel = AndroidNotificationChannel(
  'high_importance_channel', // id
  'High Importance Notifications', // title
  'This channel is used for important notifications.', // description
  importance: Importance.high,
);

final FlutterLocalNotificationsPlugin flutterLocalNotificationsPlugin =
    FlutterLocalNotificationsPlugin();
Future<void> main() async {
  WidgetsFlutterBinding.ensureInitialized();
  FirebaseMessaging.onBackgroundMessage(_firebaseMessagingBackgroundHandler);
  runApp(MyApp());
}
class MyApp extends StatelessWidget {
  const MyApp({Key key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'e-R?d?u?i',
      debugShowCheckedModeBanner: false,
      initialRoute: …
Run Code Online (Sandbox Code Playgroud)

android push-notification flutter remote-notifications firebase-cloud-messaging

0
推荐指数
1
解决办法
1820
查看次数

NSInvalidArgumentException',原因:'-[NSNull length]:发送到实例的无法识别的选择器

我的 Flutter 应用程序已更新到最新版本的 Flutter,并且我将 firebase_messaging 添加到我的应用程序中。完成此操作后,该应用程序在模拟器上运行良好,但当我尝试在实际 iOS 设备上运行它时崩溃,并出现以下错误:

  -[NSNull length]: unrecognized selector sent to instance 0x1ddcb9ee0
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[NSNull length]: unrecognized selector sent to instance 0x1ddcb9ee0'
*** First throw call stack:
(0x18c8959d8 0x1a0bfeb54 0x18c7a5bbc 0x18c89801c 0x18c899f8c 0x102deadcc 0x102dec698 0x102deb1a8 0x102dea8bc 0x18c4cd298 0x18c4ce280 0x18c4aa4f0 0x18c4aafdc 0x18c4b4800 0x1d4f3b5a4 0x1d4f3e874)
libc++abi.dylib: terminating with uncaught exception of type NSException
* thread #5, queue = 'com.google.firebase.auth.globalWorkQueue', stop reason = signal SIGABRT
    frame #0: 0x00000001b86f484c libsystem_kernel.dylib`__pthread_kill + 8
libsystem_kernel.dylib`__pthread_kill: …
Run Code Online (Sandbox Code Playgroud)

ios firebase firebase-authentication flutter firebase-cloud-messaging

0
推荐指数
1
解决办法
2684
查看次数

更新 Firebase 后无法在 swift 项目上找到“InstanceID”和“InstanceIDTokenHandler”

我有一个旧项目需要更新 Firebase,所以我这样做了。之后,我收到两个错误,但我不明白如何解决它们。有人可以帮我解决这个问题吗?

文件1.swift:

func token(withAuthorizedEntity authorizedEntity: String, scope: String, options: [AnyHashable: Any]? = nil, handler: @escaping InstanceIDTokenHandler) {
    
}
Run Code Online (Sandbox Code Playgroud)

错误:在范围内找不到类型“InstanceIDTokenHandler”

文件2.swift

func checkDeviceToken() {
    let hasDeviceToken: Bool      =  self.devicesTokenUseCase.hasDeviceToken()
    let dontHaveDeviceToken: Bool = !hasDeviceToken

    InstanceID.instanceID().instanceID { (result, _) in
        if let result = result {
            let isNotSameToken: Bool = !self.devicesTokenUseCase.isSameDeviceToken(deviceToken: result.token)

            if hasDeviceToken && isNotSameToken {
                self.updateDeviceToken(token: result.token)
            } else if dontHaveDeviceToken {
                self.sendDeviceToken(token: result.token)
            }
        } else {
            self.checkDeviceToken()
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

错误:在范围内找不到“InstanceID”

ios firebase swift firebase-cloud-messaging

0
推荐指数
1
解决办法
1562
查看次数