在哪个事件中,我可以使用 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 以进行推送通知

有时 DeviceSubscriptionExpired 事件在未过期的设备 ID 上触发。#PushSharp

PushSharp 与 Signal R

PushSharp 事件未针对 WP8 触发

PushSharp:'DeviceSubscriptionChanged',我该怎么办?