有没有办法阻止用户在从Firebase发送后收到推送通知?

时间:2017-06-08 21:17:50

标签: ios firebase push-notification apple-push-notifications firebase-cloud-messaging

我想知道我是否可以通过Firebase向用户发送多个推送通知,但是在用户在设备上看到它们之前拦截它们并允许我的应用选择性地允许通知。

这可能吗?

如果是,我需要使用哪种方法? (来自react-native-firebaseiOS

5 个答案:

答案 0 :(得分:0)

您可以向用户发送无声通知,并将实际通知安排为本地通知

参考This

(在Firebase案例中)  只有在应用程序处于前台时,才能管理通知。 如果应用程序处于后台,则无法处理,因为用户将收到通知,并且在通知被点击之前不会通知应用。

答案 1 :(得分:0)

您可以尝试使用UNNotificationServiceExtension(可从iOS 10获得)。您需要为项目添加扩展名(example how to add)。

在您的扩展程序中实施方法- (void)didReceiveNotificationRequest:(UNNotificationRequest *)request withContentHandler:(void (^)(UNNotificationContent *contentToDeliver))contentHandler;之后。

在向用户显示通知之前将调用它,您可以尝试执行某些操作(例如:将一些数据保存到本地)。

注意它仅适用于iOS 10 rich notificationshow to implement it with Firebase)。

P.S。希望对你有所帮助!

修改

Apple documentation中写道:

  

重写此方法并使用它来修改   UNNotificationContent    与通知一起提供的对象。

<强>更新

您可以尝试从服务器静默推送通知发送,检查并创建本地通知,以便在需要时向用户显示。

答案 2 :(得分:0)

当应用程序处于前台状态时,可以处理FireBase通知。首先,您在控制器和info.plist中都有来自Always的更改通知。 设置后,您可以在App委托或viewController中控制通知。

答案 3 :(得分:0)

您可以发送将在前台和后台接收的数据通知。在iOS中,它们由委托方法 Topic::where('id', $topicId)->update(['posts_count' => +1]); 处理,处理后您可以决定是否为用户创建推送。

<强> @Update

用于在低于10的iOS上接收数据消息(不推送)

application(_:didReceiveRemoteNotification:fetchCompletionHandler:)
在iOS10上

func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
      handleNotification(data: userInfo)
      completionHandler(UIBackgroundFetchResult.newData)
}

然后我只检查自定义字段是否包含我需要的数据,并使用NotificationCenter创建本地通知

func applicationReceivedRemoteMessage(_ remoteMessage: FIRMessagingRemoteMessage) {
      handleNotification(data: remoteMessage.appData)
}

请记住,这适用于数据通知而非推送通知,但在Firebase中,您可以发送这两种类型。

答案 4 :(得分:0)

使用"content-available" : 1发送静音远程通知,并决定是否要将其显示给用户。

{
    "aps" = {
        "content-available" : 1,
        "sound" : ""
    };
    // add custom key value for message

}

如果要向用户显示,请为消息提取自定义键值对,然后触发本地通知以显示用户。它也可以在后台运行。需要UIBackgroundMode启用远程通知。