2016-12-13 4 views
0

Я мог бы быть немного медленнее здесь, но можно ли отправлять push-уведомления с помощью firebase программно?Firebase Cloud Messaging Programatically with Swift 3.0

Предположим, у меня есть приложение iOS и событие кнопки. Когда я нажимаю эту кнопку, я хочу отправить push-уведомление определенным пользователям через firebase, в котором говорится «Hello World!».

Единственный способ, который я вижу сейчас, это использовать консоль уведомлений, но я хочу сделать это программно. Должен ли я иметь собственный сервер для этого?

Что вы рекомендуете как самый простой способ в наши дни отправлять удаленные push-уведомления программно, кроме моего собственного сервера?

+0

Это очень неопределенный вопрос, не зная почему, мы можем дать неверный ответ. Да, вы можете отправлять уведомления программно, но во многих случаях это неправильное решение - вы хотели бы использовать Observe и Query для уведомления клиентов о событиях, например. – Jay

+0

Хорошо, если это неправильное решение. Какое правильное решение? – TommyF

+0

Опять же, не понимая случая использования, нет способа сделать предложение так или иначе. Я понимаю ваш Hello, World, но это не то, что вы в конечном итоге пытаетесь сделать. Почему вы хотите отправлять push-уведомления, что они будут содержать? Почему вы не используете Observe и Queries, чтобы клиенты знали об изменениях в данных? Прочитали ли вы руководство по началу работы с Firebase (https://firebase.google.com/docs/database/ios/read-and-write), в котором описывается, как уведомлять клиентов без push-уведомлений? – Jay

ответ

-1

Да, мы можем отправить уведомление толчок с firebase programatically.I должны попробовать это, получая маркер устройства обоих пользователей и нажать одну апи на кнопку отправить .Just иметь вид ..

let url = NSURL(string: "https://fcm.googleapis.com/fcm/send") 

let request = NSMutableURLRequest(URL: url!) 

request.setValue("your server key ", forHTTPHeaderField:"Authorization") // your legacy server key 


    request.setValue("ebl0RxL94Ss:APA91bGXn_i6TLcXC1rZZSO1pKXCnqKjg-SxOHsjdahoJ4qIjVxX6dwal3YNeCvpHltEnwHibEuldWzfTiQewgD_J_4HIg31VE_vyvONdHN9v6VQGRcY6PaXY1xZmJ9t_cKfs7sQ9K1q", forHTTPHeaderField:"Authentification") // sender refreshedToken 


request.setValue("application/json", forHTTPHeaderField:"Content-Type") 

    request.HTTPMethod = "POST" 

let sessionConfig = NSURLSessionConfiguration.defaultSessionConfiguration() 

// dictionary containing sender refreshedToken and other notification detail including text 

let json = ["to":"c6HixiMte3A:APA91bFfNvQev2qcZqdsnJ9qoho_GlXRj1PWx6FWleScgExBi95WAkRqmp2jilCbZYoifs9bfHPyGpofjTAM239SYEiAwMRzgAONFv_KH-u49pG9C6f6UEVY4WEctjFzek9WZ7pBv31t", 
       "priority":"high", 
       "content_available":true, 
       "notification":["body":"new messages","title":text,"score":"5x1","time": "15:10"]] 


     do { 

      let jsonData = try NSJSONSerialization.dataWithJSONObject(json, options: NSJSONWritingOptions.PrettyPrinted) 

      request.HTTPBody = jsonData 

      } catch let error as NSError { 
      print(error) 
     } 

     // insert json data to the request 

let urlSession = NSURLSession(configuration: sessionConfig, delegate: self, delegateQueue: NSOperationQueue.mainQueue()) 


let dataTask = urlSession.dataTaskWithRequest(request) { (data: NSData?, response: NSURLResponse?, error: NSError?) -> Void in 

      let strData = NSString(data: data!, encoding: NSUTF8StringEncoding) 
      print("Body: \(strData)") 
      print(response,data) 
      print(error) 
     } 

     dataTask.resume() 
+0

Не делайте этого! Поступая таким образом, вы по существу просочились на свой серверный ключ к клиенту, и Bad People могли начать использовать его, чтобы спамить ваших пользователей уведомлениями, которые выглядели бы так, как будто они поступают из вашего приложения. –

+0

@Dupinder. Я запутался. Используете ли вы ключ сервера на стороне клиента в этом коде? Это опасно. – bibscy

0

В настоящее время нет. Там нет рекомендуемого способа сделать это через Firebase Cloud Messaging, не имея собственного сервера для выполнения логики. (Я бы не звонил на службу от клиента, как рекомендовал Dupinder, так как это приведет к утечке вашего ключа сервера в мир, что действительно является плохим делом)

Это, конечно же, запрос функции, который слышит команда довольно часто, поэтому это то, о чем они, конечно, знают и изучают.

0
Edited because on comment: Please make sure do NOT include the server-key into your client. There are ways "for not so great people" to find it and do stuff... The Proper way to achieve that is for youre client to instruct youre app-server to send the notification. 

You have to send a HTTP-Post to the Google-API-Endpoint. 

You need the following headers: 

Content-Type: application/json 
Authorization: key={your_server_key} 
You can obtain youre server key within in the Firebase-Project. 

HTTP-Post-Content: Sample 

{ 
    "notification": { 
     "title": "Notification Title", 
     "text": "The Text of the notification." 
    }, 
    "project_id": "<your firebase-project-id", 
    "to":"the specific client-device-id" 
} 
Смежные вопросы