如何在不使用 Firebase 控制台的情况下向 iOS 设备发送 Firebase 云消息通知?
Posted
技术标签:
【中文标题】如何在不使用 Firebase 控制台的情况下向 iOS 设备发送 Firebase 云消息通知?【英文标题】:How can I send a Firebase Cloud Messaging notification to iOS device without use the Firebase Console? 【发布时间】:2016-08-03 08:49:20 【问题描述】:如果我从 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;
但是,如果向 iOS 设备发送通知,我是使用服务器上的 api 发送的我没有在通知中心收到消息提醒(从屏幕顶部向下滑动以查看通知中心)。
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() + "®istration_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();
【问题讨论】:
尝试验证您是否正确格式化下游消息,检查sending downstream messages from the server。您可能编码错误或不支持的格式。删除timetolive
,因为它尚不支持iOS 上的通知消息。
***.com/questions/38479668/…
【参考方案1】:
在不使用 Firebase 控制台的情况下测试推送通知的另一种方法是使用 Postman。附上两张带有配置细节的图片。
图 1:设置通知负载
图 2:设置请求标头( Content-Type 和 Authorization )
Firebase 推送通知端点:https://fcm.googleapis.com/fcm/send
【讨论】:
以上是关于如何在不使用 Firebase 控制台的情况下向 iOS 设备发送 Firebase 云消息通知?的主要内容,如果未能解决你的问题,请参考以下文章
如何在不覆盖的情况下向 Firebase Firestore 添加值?
我开发了提醒应用程序,因此如何在不使用 firebase 的情况下向用户发送本地通知
如何在不使用 HTML 的情况下向 JLabel 添加换行符