2016-12-13 9 views
0

ここでは少し遅いかもしれませんが、プログラムベースでファイヤーベースのプッシュ通知を送信することは可能ですか?Swift 3.0を使用したプログラムによるFirebase Cloud Messaging

iOSアプリとボタンイベントがあるとします。そのボタンを押すと、「Hello World!」というfirebaseを介して特定のユーザーにプッシュ通知を送信したいと考えています。

これを達成するために私が今見ている唯一の方法は、通知コンソールを使用することですが、私はそれをプログラム的にやりたいのです。私は実際にこれを行うために自分のサーバーを持っている必要がありますか?

最近、私自身のサーバーを持っているだけでなく、リモートプッシュ通知をプログラマチックに送信する最も簡単な方法として、お勧めですか?

+0

これは、間違った答えを提供する理由を知らずに、非常に曖昧な質問です。はい、プログラムで通知を送信することはできますが、多くの場合、それは間違った解決策です.OperserveとQueryを使用してクライアントにイベントなどを通知したい場合があります。 – Jay

+0

それが間違った解決策である場合は、[OK]をクリックします。正しい解決策は何ですか? – TommyF

+0

また、ユースケースを理解することなく、どちらか一方の方法で提案を行う方法はありません。私はあなたのハロー、世界を理解していますが、それはあなたが最終的にやっていることではありません。プッシュ通知を送信する理由は何ですか。プッシュ通知には何が含まれますか。 Observe and Queriesを使用してクライアントがデータの変更を知っているのはなぜですか?プッシュ通知なしでクライアントに通知する方法については、[Firebase入門ガイド](https://firebase.google.com/docs/database/ios/read-and-write)ガイドをご覧ください。 – Jay

答えて

-1

はい、私たちはfirebase programatically.Iでプッシュ通知を送信することができますが

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

しないでください!そうすることで、本質的にサーバーキーがクライアントに漏洩し、悪意のあるユーザーがサーバーキーを使用して、アプリから来ているように見える通知でユーザーを迷惑メールにする可能性があります。 –

+0

@Dupinder。私は混乱しています。このコードでクライアント側のサーバーキーを使用していますか?それは危険です。 – bibscy

0

..ユーザーの両方のデバイストークンを取得し、顔をしている.Just送信ボタンに一つのAPIを押すことで、これを試してみます現在のところ、いいえ。 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" 
} 
関連する問題