/ / IOS फायरबेस क्लाउड मैसेजिंग (FCM) में, APNS को विषय पर भेजें, लेकिन iPhone से प्रेषक के अलावा - ios, iphone, स्विफ्ट, फायरबेस-क्लाउड-मैसेजिंग

IOS फायरबेस क्लाउड मैसेजिंग (FCM) में, APNS को विषय पर भेजें लेकिन iPhone से प्रेषक के अलावा - ios, iphone, स्विफ्ट, फायरबेस-क्लाउड-मैसेजिंग

सभी उपकरणों पर APNS भेजने के लिए एक विषय की सदस्यता लें:

//subscribe to topic to send message to multiple device
Messaging.messaging().subscribe(toTopic: "alldevices")

नोट: "सभी डिवाइस" उस विषय का नाम है, जहां सभी सब-डिवाइसेज़ को APNS मिलेगा

नीचे दिए गए विषय जैसे प्रोग्राम के माध्यम से सभी उपकरणों पर APNS भेजें:

func sendPushMessage(todoItem:TodoItem, isAdded:Bool = true) {

let url = URL(string: "https://fcm.googleapis.com/fcm/send")!
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
let strKey:String = "Here FCM Server Key"
request.setValue("key=(strKey)", forHTTPHeaderField: "Authorization")

var message:String = ""
if isAdded {
message = "Todo with title "(todoItem.title)" added"
}
else{
message = "Todo with title "(todoItem.title)" removed"
}

let dictData = ["to":"/topics/alldevices","priority":"high","notification":["body":message,"title":"Community","badge":"1"]] as [String : Any]

do {
let jsonData = try JSONSerialization.data(withJSONObject: dictData, options: .prettyPrinted)
// here "jsonData" is the dictionary encoded in JSON data

request.httpBody = jsonData

let task = URLSession.shared.dataTask(with: request, completionHandler: { (responseData: Data?, response: URLResponse?, error: Error?) in

let strData :String = String(data: responseData!, encoding: String.Encoding.utf8)!
print("data : (strData)")
NSLog("(String(describing: response) )")
})
task.resume()

} catch {
print(error.localizedDescription)
}
}

यहाँ समस्या प्रेषक (ऐप का उपयोग करने वाला उपयोगकर्ता) को भी मिलती हैप्रेषक के रूप में APNS को "एल्ल्डेविसेस" विषय पर भी सदस्यता दी गई है। लेकिन तकनीकी रूप से प्रेषक को "APNS" की आवश्यकता नहीं है क्योंकि प्रेषक स्वयं अन्य सभी उपकरणों के लिए APNS उत्पन्न करता है

नोट: हम APNS को भेजने या प्रबंधित करने के लिए अलग से सर्वर नहीं रखते हैं। यहां केवल FCM ही हमारे लिए APNS का प्रबंधन करता है।

उत्तर:

जवाब के लिए 0 № 1

मुझे नहीं लगता कि आप एपीआई के माध्यम से ऐसा कर सकते हैं। शायद "फायरबस कंसोल" के नोटिफिकेशन सेक्शन के माध्यम से "यूज़र ऑडियंस (ओं)" का उपयोग किया जा सकता है, लेकिन यह स्पष्ट रूप से जीता है कि "आपके मुद्दे को हल नहीं करेगा। हो सकता है कि फ़ायरबाइक एपीआई उपयोगकर्ता ऑडियंस को सपोर्ट करना शुरू कर दे या नहीं।

एक चीज जिसे आप देख सकते हैं, वह "प्रदर्शन" संदेश के बजाय "डेटा" संदेश भेज रही है।

यह अन्य सभी उपयोगकर्ताओं को एक "मूक" सूचना भेजता है, और एक बार ग्राहक फोन प्राप्त करने के बाद यह तय करेगा कि अधिसूचना प्रदर्शित करने की आवश्यकता है या नहीं।

उदाहरण के लिए, "सूचना" ऑब्जेक्ट के बजाय "डेटा" ऑब्जेक्ट का उपयोग करने के लिए आपका फायरबेस पोस्ट बदल जाएगा

{
"to": "/topics/alldevices",
"content_available": true,
"data": {
"sender": "{{this_phones_uuid}}"
},
"priority": "high"
}

जहां "प्रेषक" एक विशिष्ट पहचानकर्ता है जिसे आपने उपयोगकर्ताओं के फ़ोन पर बनाया और संग्रहीत किया है।

अधिसूचना प्राप्त करते समय आप केवल एक सूचना प्रदर्शित करेंगे यदि "प्रेषक" मूल्य फोन पर संग्रहीत यूयूआईडी के बराबर नहीं है।

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)
}
}
}

आप इस पद्धति का उपयोग करने से पहले विश्वसनीयता में देखना चाहते हैं क्योंकि मौन सूचनाओं को ओएस द्वारा थ्रॉटल किया जा सकता है, और कभी-कभी वितरित भी नहीं किया जाता है।