В каком случае я могу получить ответ GCM с помощью PushSharp для отправки уведомления на устройства Android?

Я пытаюсь отправить уведомление с моего сервера .Net на все устройства Android. Загрузил мое приложение для Android. Я использую библиотеку PushSharp. Отправка уведомлений в порядке. Но я пытаюсь получить ответ от GCM, который сообщает мне канонические идентификаторы регистрации, если пользователь удалит приложение и снова загрузит его. У меня возникла проблема с отправкой уведомления о буксировке на то же устройство Android. Один с новым идентификатором и один с незарегистрированным идентификатором. Я пытаюсь удалить этот идентификатор из своей базы данных. Так что я могу отправить только одно уведомление для одного устройства. Я зарегистрировал эти 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)
    {

    }

person user123456    schedule 17.04.2013    source источник


Ответы (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);
        }
    }
}
person Lee Richardson    schedule 07.09.2013
comment
Спасибо за ответ. Я начал работать в этом событии: private static void Events_OnDeviceSubscriptionExpired (платформа PlatformType, строка deviceInfo, уведомление об уведомлении) {} - person user123456; 03.10.2013
comment
@Mohammadjouhari: Итак, где взять канонический регистрационный идентификатор в Events_OnDeviceSubscriptionExpired? - person Marcel N.; 01.04.2014
comment
@marceln, ты имеешь в виду, как мне это получить? - person user123456; 01.04.2014
comment
@Mohammadjouhari: Да, именно так. - person Marcel N.; 01.04.2014
comment
К моменту регистрации события pushBroker.OnDeviceSubscriptionExpired += OnDeviceSubscriptionExpired; определите метод следующим образом: private static void OnDeviceSubscriptionExpired (отправитель объекта, строка expiredDeviceSubscriptionId, отметка времени DateTime, уведомление INotification) { } Тогда у вас есть это как строка в теле метода. Вы можете вызвать функцию БД, чтобы удалить его. - person user123456; 01.04.2014
comment
Класс PushBroker включен в библиотеку Push Sharp. - person user123456; 01.04.2014