在哪个事件中,我可以使用 PushSharp 获取 GCM 响应以向 Android 设备发送通知?
Posted
技术标签:
【中文标题】在哪个事件中,我可以使用 PushSharp 获取 GCM 响应以向 Android 设备发送通知?【英文标题】:In Which Event I can Get The GCM response using PushSharp To send Notification To Android Devices? 【发布时间】:2013-04-17 11:30:42 【问题描述】:我正在尝试从我的 .Net 服务器向所有下载了我的 android 应用程序的 Android 设备发送通知。我正在使用 PushSharp 库。发送通知很好。但我试图从 GCM 获得响应,告诉我规范注册 ID 如果用户卸载应用程序并重新下载它。我在向同一个 android 设备发送拖车通知时遇到问题。一个使用新 ID,一个使用未注册 ID 我正在尝试从我的数据库中删除该 ID。这样我只能为单个设备发送一个通知。我会注册这 4 个由 GCM 触发的事件。 我可以在哪个事件中做我的逻辑?
感谢任何帮助。
这是我的代码:
private static void Events_OnNotificationSent(Notification notification)
private static void Events_OnNotificationSendFailure(Notification notification, Exception notificationFailureException)
private static void Events_OnChannelException(Exception exception, PlatformType platformType, Notification notification)
private static void Events_OnDeviceSubscriptionExpired(PlatformType platform, string deviceInfo, Notification notification)
private static void Events_OnDeviceSubscriptionIdChanged(PlatformType platform, string oldDeviceInfo, string newDeviceInfo, Notification notification)
【问题讨论】:
【参考方案1】:如果我对您的理解正确,如果用户卸载了您的应用,您希望从数据库中删除该设备。我正在为我的项目使用以下逻辑:
private void Events_OnNotificationFailed(object sender, INotification notification, Exception error)
var gcmNotification = notification as GcmNotification;
bool userHasUninstalled = error.Message.Contains("Device Subscription has Expired");
bool isAndroidNotification = gcmNotification != null;
if (isAndroidNotification && userHasUninstalled)
foreach (var registrationId in gcmNotification.RegistrationIds)
DeleteDeviceByIdentifier(registrationId);
【讨论】:
感谢您的回复。我在这个事件中工作: private static void Events_OnDeviceSubscriptionExpired(PlatformType platform, string deviceInfo, Notification notification) @Mohammadjouhari:那么,您从哪里获得Events_OnDeviceSubscriptionExpired
中的规范注册 ID?
@marceln 你的意思是我怎么得到它?
@Mohammadjouhari:是的,没错。
当您注册活动时,pushBroker.OnDeviceSubscriptionExpired += OnDeviceSubscriptionExpired;以这种方式定义方法: private static void OnDeviceSubscriptionExpired(object sender, string expiredDeviceSubscriptionId, DateTime timestamp, INotification notification) 然后你将它作为方法体中的字符串。您可以调用数据库函数将其删除。以上是关于在哪个事件中,我可以使用 PushSharp 获取 GCM 响应以向 Android 设备发送通知?的主要内容,如果未能解决你的问题,请参考以下文章
我是不是需要使用 PushSharp 等待每条消息的 Sent/Failure 事件
使用 pushsharp 获取 android 的注册 ID 以进行推送通知