如何在不使用Firebase控制台的情况下向iOS设备发送Firebase云消息通知?

3

如果我从FCM控制台向iOS设备发送通知,我将在通知中心收到消息提醒(从屏幕顶部向下滑动以查看通知中心)。

didRecievedRemoteNotification输出结果如下:

{

    aps =     {

        alert = "From console";

    };

    "gcm.message_id" = "0:1470206236110595%b2c76869b2c76869";

    "gcm.n.e" = 1;

    "google.c.a.c_id" = 2979094970349938289;

    "google.c.a.e" = 1;

    "google.c.a.ts" = 1470206236;

    "google.c.a.udt" = 0;

}

但如果我使用服务器的API发送通知到iOS设备,我在通知中心上没有收到消息提醒(从屏幕顶部向下滑动查看通知中心)。

didRecievedRemoteNotification的输出为:

{

    "collapse_key" = "do_not_collapse";

    from = 67981113117;

    message = "alert from api";

    time = "03-08-2016 12:44:53";

}

我的API代码是用C#编写的:

string RegIDs = "some id";





                var appID = "some id";


                var SenderID = "some id";
                var value = Text1.Text;
                WebRequest tRequest;



            tRequest = WebRequest.Create("https://fcm.googleapis.com/fcm/send");

                tRequest.Method = "POST";
                tRequest.ContentType = "application/x-www-form-urlencoded;charset=UTF-8";
                tRequest.Headers.Add(string.Format("Authorization: key={0}", appID));

                tRequest.Headers.Add(string.Format("Sender: id={0}", SenderID));


                //Data_Post Format
                // string postData = "{'collapse_key' : 'demo', 'registration_id': [ '" + regId + "' ], 
                //'data': {'message': '" + Label1.Text + "'},'time_to_live' : '3' }";

            //json for android 
                string postData = "collapse_key=score_update&time_to_live=108&delay_while_idle=1&data.message="
                   + value + "&data.time=" + System.DateTime.Now.ToString() + "&registration_id=" + RegIDs + "";



            Console.WriteLine(postData);
                Byte[] byteArray = Encoding.UTF8.GetBytes(postData);
                tRequest.ContentLength = byteArray.Length;

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

                WebResponse tResponse = (WebResponse)tRequest.GetResponse();


                dataStream = tResponse.GetResponseStream();

                StreamReader tReader = new StreamReader(dataStream);

                String sResponseFromServer = tReader.ReadToEnd();

                Label3.Text = sResponseFromServer; //printing response from GCM server.
                tReader.Close();
                dataStream.Close();
                tResponse.Close();

尝试验证您是否正确格式化下行消息,请检查从服务器发送下行消息。您可能编写了错误的或不支持的格式。由于iOS上的通知消息尚未支持,因此请删除timetolive - Mr.Rebot
https://dev59.com/4Jnga4cB1Zd3GeqPThhs - Kishore Relangi
1个回答

0

测试推送通知的另一个选择是使用Postman,而不是使用Firebase控制台。 附上两个包含配置细节的图像。

图像1:设置通知有效负载 enter image description here

图像2:设置请求标头(Content-Type和Authorization) enter image description here

Firebase推送通知端点:https://fcm.googleapis.com/fcm/send


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接