2016-09-23 10 views
0

c#サーバで複数の電話機に一度にFCM通知を送信しようとしています。私は完璧に動作する、次のコードで一度に一つの電話にfirebaseクラウドがC#サーバで複数のユーザにメッセージを送信

try 
     { 
      var applicationID = "xAxxxxxxxxxxxxxxxxxxxx6g9vOeEmw1njaivVfIx"; 
      var senderId = "x7xxxxxxxxxxx5x"; 
      string deviceId = pushToken; 
      WebRequest tRequest = WebRequest.Create("https://fcm.googleapis.com/fcm/send"); 
      tRequest.Method = "post"; 
      tRequest.ContentType = "application/json"; 
      var msg2send = new 
      { 
       to = deviceId, 
       notification = new 
       { 
        body = msg, 
        title = "My Car Wash App", 
        icon = "myicon" 
       }, 
       data = new 
       { 
        priority = 10, 
        notice = msg 
       } 
      }; 

     var serializer = new JavaScriptSerializer(); 
     var json = serializer.Serialize(msg2send); 

     Response.Write(json); 

     Byte[] byteArray = Encoding.UTF8.GetBytes(json); 
     tRequest.Headers.Add(string.Format("Authorization: key={0}", applicationID)); 
     tRequest.Headers.Add(string.Format("Sender: id={0}", senderId)); 
     tRequest.ContentLength = byteArray.Length; 

     using (Stream dataStream = tRequest.GetRequestStream()) 
     { 
      dataStream.Write(byteArray, 0, byteArray.Length); 

      using (WebResponse tResponse = tRequest.GetResponse()) 
      { 
       using (Stream dataStreamResponse = tResponse.GetResponseStream()) 
       { 
        using (StreamReader tReader = new StreamReader(dataStreamResponse)) 
        { 
         string sResponseFromServer = tReader.ReadToEnd(); 
         Response.Write(sResponseFromServer); 
        } 
       } 
      } 
     } 
    } 

    catch (Exception ex) 
    { 
     Response.Write(ex.Message); 
    } 

をメッセージを送信しますが、私のループ私のトークンを通って、上と何百もの要求を作成する上でそのメソッドを呼び出し、それは良い

ではありませんすることができます私は私が送ったときにregistration_idsが有効なトークンで正しい配列であることを肯定しています私は、私はちょうどすべてのトークンを持つ配列を渡すことができますよう、マルチキャストメッセージを送信しようとしていますが、私は悪い要求

var msg2send = new 
      { 
       registration_ids = "[id1, id2]", 
       notification = new 
       { 
        body = msg, 
        title = "My Car Wash App", 
        icon = "myicon" 
       }, 
       data = new 
       { 
        priority = 10, 
        notice = msg 
       } 
      }; 

を得ることに保ちます私の要求。私は何が間違っているのか分かりません。どんな助けや提案も本当に大変感謝しています。

+0

あなたはまた、応答を投稿することはできますか? –

答えて

0

Firebase Device Group Messagingを使用すると、とし、すべてのデバイストークンを登録してからsend downstream messages to client appsのJSONペイロードを使用して登録することができます。

https://fcm.googleapis.com/fcm/send 
Content-Type:application/json 
Authorization:key=AIzaSyZ-1u...0GBYzPu7Udno5aA 

{ 
    "to": "aUniqueKey", 
    "data": { 
     "hello": "This is a Firebase Cloud Messaging Device Group Message!", 
    } 
} 
1

これはかなり長いものでした。これは、Google検索をたくさん行った後、正解と思います。私は他の開発者がこのバグを通過するためにここに入れます。

問題がregistration_ids =文字列配列を必要としていますが、文字列でそれを割り当てられ"[ID1、ID2]"、// registration_idsです。だからこそ、多くの開発者が悪い要求を受けていますが、理由は分かりません。

解決方法: var msg2send = new {...}以外の配列を作成してみてください。私はそれを試して、その作業100%

string[] deviceIds = new string[] {"id1","id2","id3"}; 
var msg2send = new 
      { 
       registration_ids = deviceIds, 
       notification = new 
       { 
        body = msg, 
        title = "My Car Wash App", 
        icon = "myicon" 
       }, 
       data = new 
       { 
        priority = 10, 
        notice = msg 
       } 
      }; 
+0

このリプレイをお寄せいただきありがとうございました。 – Tom

関連する問題