订阅主题以将APNS发送到所有设备:
df = df.sort_values('update_timestamp').drop_duplicates(['biz_id','offer_id'], 'last')
print (df)
biz_id offer_id update_timestamp amount
0 1 1 2013-04-30 5
3 0 2 2013-08-30 5
1 2 1 2014-05-30 7
2 1 2 2015-11-30 3
注意:'所有设备'是所有下标设备将获得APNS
的主题名称通过下面给出的主题以编程方式将APNS发送到所有设备:
//subscribe to topic to send message to multiple device
Messaging.messaging().subscribe(toTopic: "alldevices")
这里的问题是发件人(使用app的用户)也获得了APNS,因为发件人也订阅了主题' alldevices'。但从技术上讲,发送方并不需要APNS,因为发送方自己为所有其他设备生成了APNS
注意:我们没有单独的服务器来发送或管理APNS。 FCM这里为我们管理APNS。
答案 0 :(得分:0)
我认为你不能通过API做到这一点。也许通过Firebase控制台的通知部分使用“用户受众”,但这显然无法解决您的问题。如果Firebase API开始支持用户受众,那么将来可能会实现这一点。
您可以研究的一件事是发送“数据”消息,而不是“显示”消息。
这会向所有其他用户发送“无声”通知,一旦收到,客户端电话就会决定是否需要显示通知。
例如,您的firebase帖子会更改为使用'data'对象,而不是'notification'对象
{
"to": "/topics/alldevices",
"content_available": true,
"data": {
"sender": "{{this_phones_uuid}}"
},
"priority": "high"
}
“发件人”是您创建并存储在用户手机上的唯一标识符。
收到通知时,如果“发件人”值不等于手机上存储的UUID,则只会显示通知。
func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
if let sender = userInfo["sender"] as? String {
if sender != {{your_stored_uuid}} {
let notification = UNMutableNotificationContent()
notification.title = "title"
notification.body = "body"
let trigger = UNTimeIntervalNotificationTrigger.init(timeInterval: 1, repeats: false)
let request = UNNotificationRequest.init(identifier: "todo", content: notification, trigger: trigger)
UNUserNotificationCenter.current().add(request)
}
}
}
您可能希望在使用此方法之前研究可靠性,因为操作系统可能会限制静默通知,有时甚至无法提供。