Pushsharp 4.0 with Firebase
这个问题的出现的原因是在使用PushSharp 4.0和Firebase时遇到了一些困难。根据上述帖子中的评论,人们在做了建议的更改后成功地使用PushSharp和Firebase。
解决方法是在GitHub上查找相关评论,尤其是GcmConfiguration设置和QueueNotification的代码实现。问题提出者在网络上找到了不同的实现方式,但不确定哪个是正确的。
以下是一种可能的解决方法,可以尝试使用以下代码片段:
using PushSharp; using PushSharp.Android; using PushSharp.Core; using PushSharp.Google; // ... var config = new GcmConfiguration("YOUR_API_KEY"); config.GcmUrl = "https://fcm.googleapis.com/fcm/send"; var broker = new PushBroker(); broker.RegisterGcmService(config); // ... var notification = new GcmNotification() .ForDeviceRegistrationId("DEVICE_REGISTRATION_ID") .WithJson("{\"alert\":\"Hello World!\",\"badge\":7,\"sound\":\"sound.caf\"}"); broker.QueueNotification(notification); // ...
以上代码片段展示了如何使用PushSharp和Firebase进行推送通知。在代码中,需要替换"YOUR_API_KEY"和"DEVICE_REGISTRATION_ID"为实际的API密钥和设备注册ID。
希望这个解决方法能够帮助到你解决PushSharp 4.0和Firebase的问题。
这个问题的出现原因是使用的Pushsharp库版本为4.0,而该版本不再支持Firebase(FCM)推送服务。解决方法是升级到最新版本的Pushsharp,新版本已经添加了对Firebase的支持。
以下是解决方法的代码示例:
class Program { static void Main(string[] args) { try { string token = "putYourSecretTokenHere"; using (var s = new FcmPushNotificationService()) { s.SendPushNotification(token); Console.ReadLine(); } } catch (Exception e) { Console.WriteLine(e); Console.ReadLine(); } } public sealed class FcmPushNotificationService : IDisposable { #region Constructors public FcmPushNotificationService() { string serverKey = "Legacy server key"; this.Config = new FcmConfiguration(serverKey); this.Config.FcmUrl = "https://fcm.googleapis.com/fcm/send"; this.Broker = this.InitializeBroker(); } #endregion #region Properties private FcmServiceBroker Broker { get; } private FcmConfiguration Config { get; } #endregion #region Private Methods private FcmServiceBroker InitializeBroker() { var fcmServiceBroker = new FcmServiceBroker(this.Config); fcmServiceBroker.OnNotificationSucceeded += this.OnNotificationSucceeded; fcmServiceBroker.OnNotificationFailed += this.OnNotificationFailed; fcmServiceBroker.Start(); return fcmServiceBroker; } #endregion #region Event Handlers private void OnNotificationFailed(FcmNotification fcmNotification, AggregateException aggregateEx) { aggregateEx.Handle(ex => { // See what kind of exception it was to further diagnose if (ex is FcmNotificationException notificationException) { Console.WriteLine($"Notification of {string.Join(", ", notificationException.Notification.RegistrationIds)} failed: {notificationException.Message}"); } else if (ex is FcmMulticastResultException multicastException) { Console.WriteLine($"Notification of {string.Join(", ", multicastException.Succeeded.SelectMany(n => n.RegistrationIds))} succeeded."); Console.WriteLine($"Notification of {string.Join(", ", multicastException.Failed.SelectMany(n => n.Key.RegistrationIds))} failed: {multicastException.Message}"); } else if (ex is DeviceSubscriptionExpiredException expiredException) { Console.WriteLine($"Device registration id expired: {expiredException.OldSubscriptionId}. Device registration id changed to {expiredException.NewSubscriptionId}"); } else if (ex is RetryAfterException retryException) { Console.WriteLine($"FCM rate limited, don't send more until after {retryException.RetryAfterUtc}"); } else { Console.WriteLine($"Failed to send notification {ex}"); } // Mark it as handled return true; }); } private void OnNotificationSucceeded(FcmNotification fcmNotification) { Console.WriteLine($"Notification sent to {string.Join(", ", fcmNotification.RegistrationIds)}. Data: {fcmNotification.Data}, Notification: {fcmNotification.Notification}"); } #endregion #region IDisposable Members ///public void Dispose() { this.Broker?.Stop(); } #endregion #region IPushNotificationService Members /// public void SendPushNotification(string token) { var notification = JObject.Parse("{\"title\": \"Test\",\"body\": \"Success!\"}"); this.Broker.QueueNotification(new FcmNotification { RegistrationIds = new List { token }, Notification = notification }); } #endregion } }
现在,通过升级到最新版本的Pushsharp,应该可以成功使用Firebase(FCM)推送服务了。
Pushsharp 4.0与Firebase的问题出现的原因是Google Play控制台中的“Linked Sender ID”选项不再可用,因此无法直接在控制台中找到SenderID。解决方法是将SenderID手动添加到应用的google-services.json文件中。
步骤如下:
1. 在console.firebase.google.com上创建一个新项目。
2. 进入设置->云消息传递。将该SenderID作为PushSharp的Sender ID,并将Legacy Server Key作为PushSharp的Authentication Key。
3. 进入Google Play控制台,选择项目,然后进入开发工具->服务和API。
4. 在"Linked Sender ID"字段中输入SenderID,将App项目与新的FCM项目链接起来。
至此,服务器的配置就完成了。
然后,需要将App与新的SenderID连接起来。通常情况下,可以通过将google-services.json文件添加到Firebase设置中来完成。但是,由于使用了PhoneGap/Cordova插件来发送通知,所以需要进行如下操作:
1. 将GCM_SENDER_ID更改为上述的SenderID。
不幸的是,为了使其正常工作,必须重新分发应用的新版本。但它确实可以正常工作。
希望这对其他人有所帮助。