FCM(Firebase Cloud Messaging)通过Asp.Net实现推送通知。
问题的出现原因:原先使用的方法在发送 Firebase 云消息通知时存在一些问题,需要找到一个更好的解决方案。
解决方法:更新到最新的 .NET Admin SDK,并按照指示进行安装和配置。然后使用新的 SDK 初始化客户端,并创建通知消息并发送到目标设备。最后,将其添加到服务集合中以供使用。
using FirebaseAdmin; using FirebaseAdmin.Messaging; using Google.Apis.Auth.OAuth2; public class MobileMessagingClient : IMobileMessagingClient { private readonly FirebaseMessaging messaging; public MobileMessagingClient() { var app = FirebaseApp.Create(new AppOptions() { Credential = GoogleCredential.FromFile("serviceAccountKey.json").CreateScoped("https://www.googleapis.com/auth/firebase.messaging")}); messaging = FirebaseMessaging.GetMessaging(app); } private Message CreateNotification(string title, string notificationBody, string token) { return new Message() { Token = token, Notification = new Notification() { Body = notificationBody, Title = title } }; } public async Task SendNotification(string token, string title, string body) { var result = await messaging.SendAsync(CreateNotification(title, body, token)); //do something with result } } // 添加到服务集合 services.AddSingleton();
以上是问题出现的原因和解决方法。
FCM (Firebase Cloud Messaging)是一种用于发送推送通知的服务,可以用于在移动应用程序中向用户发送消息。然而,在使用ASP.NET中的FCM推送通知时,可能会遇到一些问题。
问题的原因可能是在代码中缺少获取设备令牌(DeviceToken)的逻辑。设备令牌是每个移动设备唯一的标识符,用于将推送通知发送到特定的设备。在该代码中,设备令牌的获取逻辑不明确,需要进一步补充。
解决方法是通过调用相应的移动设备平台提供的API,获取设备令牌,并将其传递给SendNotification方法。例如,在iOS平台上,可以使用APNs(Apple Push Notification service)来获取设备令牌,而在Android平台上,可以使用FCM(Firebase Cloud Messaging)来获取设备令牌。
下面是一个示例代码,演示了如何在ASP.NET中获取iOS设备令牌的逻辑:
public string GetDeviceToken() { // Logic to get device token from APNs // ... return deviceToken; }
然后,将该设备令牌传递给SendNotification方法:
string deviceToken = GetDeviceToken(); string title = "Notification Title"; string msg = "Notification Message"; Notification notification = new Notification(); string result = notification.SendNotification(deviceToken, title, msg);
通过补充获取设备令牌的逻辑,并将其传递给SendNotification方法,就可以解决在ASP.NET中使用FCM推送通知的问题。
希望这篇文章对于在ASP.NET中使用FCM推送通知的开发人员有所帮助。
问题原因:使用的API密钥和发送者ID有误,导致在发送请求时返回错误。(401) Unauthorized.
解决方法:使用正确的API密钥和发送者ID来发送请求。
以下是使用ASP.NET实现FCM(Firebase Cloud Messaging)推送通知的服务器端代码:
using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Net; using System.Text; using System.Web; using System.Web.Script.Serialization; namespace Sch_WCFApplication { public class PushNotification { public PushNotification(Plobj obj) { try { var applicationID = "AIza---------4GcVJj4dI"; var senderId = "57-------55"; string deviceId = "euxqdp------ioIdL87abVL"; WebRequest tRequest = WebRequest.Create("https://fcm.googleapis.com/fcm/send"); tRequest.Method = "post"; tRequest.ContentType = "application/json"; var data = new { to = deviceId, notification = new { body = obj.Message, title = obj.TagMsg, icon = "myicon" } }; var serializer = new JavaScriptSerializer(); var json = serializer.Serialize(data); 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(); string str = sResponseFromServer; } } } } } catch (Exception ex) { string str = ex.Message; } } } }
API密钥和发送者ID的获取方法如下:
1. 进入Firebase应用。
2. 点击项目设置,找到Cloud Messaging选项。
3. 在此处找到API密钥和发送者ID。
要获取设备ID,需要在FirebaseInstanceIdService服务中使用FirebaseInstanceId.getInstance().getToken()方法生成一个令牌。
如果出现"401 Unauthorized"错误,需要确认使用的API密钥和发送者ID是否正确,并且确保从Firebase控制台中发送的消息是否能够成功接收。另外,可以尝试使用项目设置中的服务器密钥而不是传统的服务器密钥来解决此问题。