Доставка сообщений PushSharp GCM

Недавно я внедрил PushSharp в приложение, но хоть всю жизнь не могу понять, почему уведомление не появляется на устройстве.

Ниже приведен метод, который объединяется для проверки поведения:

private void SendPushNotification()
{
    var push = new PushBroker();

    //Wire up the events for all the services that the broker registers
    push.OnNotificationSent += NotificationSent;
    push.OnChannelException += ChannelException;
    push.OnServiceException += ServiceException;
    push.OnNotificationFailed += NotificationFailed;
    push.OnDeviceSubscriptionExpired += DeviceSubscriptionExpired;
    push.OnDeviceSubscriptionChanged += DeviceSubscriptionChanged;
    push.OnChannelCreated += ChannelCreated;
    push.OnChannelDestroyed += ChannelDestroyed;

    push.RegisterGcmService(new GcmPushChannelSettings("My-API-Key-here"));

    push.QueueNotification(new GcmNotification().ForDeviceRegistrationId("MyReallyLongRegisteredDeviceKeyHere")
              .WithJson(@"{""alert"":""Hello World!"",""badge"":7,""sound"":""sound.caf""}"));


    //Stop and wait for the queues to drains
    push.StopAllServices();
}

Этот метод вызывается сразу после запуска приложения, поэтому я ожидаю, что сразу же получу уведомление, которого нет.

Что еще странно, так это то, что вызывается событие OnNotificationSent, которое будет означать, что сообщение прошло.

Есть ли что-то еще, что мне нужно настроить, чтобы это работало? В документации указано, что идентификатор отправителя, имя пакета и ключ API необходимы для отправки уведомлений.

https://github.com/Redth/PushSharp/wiki/How-to-Configure-&-Send-GCM-Google-Cloud-Messaging-Push-Notifications-using-PushSharp#setting-up-pushsharp-to-send-notifications

все, кроме ключа API, используются.

Любая помощь будет принята с благодарностью.


person Matthew Merryfull    schedule 11.02.2015    source источник
comment
Вы изменили имя пакета на свое? Например, BroadcastReceiver.   -  person ztan    schedule 11.02.2015
comment
Вы имеете в виду сервер или приложение? Как уже упоминалось, я не вижу в документации ничего, что указывало бы на то, что мне нужно обновить имя пакета.   -  person Matthew Merryfull    schedule 12.02.2015
comment
С этой страницы: github.com/Redth/PushSharp take a look at the PushService.cs file in the sample project. You can copy much of this class into your own App, but again be sure to substitute your own package name in where applicable (the BroadcastReceiver attributes need to be changed).   -  person ztan    schedule 12.02.2015
comment
@MatthewMerryfull Я столкнулся с ТОЧНО той же проблемой. Мой код почти идентичен вашему коду. Можете ли вы указать в деталях, как вы решили это. Я действительно борюсь с этой проблемой.   -  person Hakan Fıstık    schedule 19.08.2015
comment
@ztan, пожалуйста, объясните подробнее свое предложение. Я не мог понять вашу идею.   -  person Hakan Fıstık    schedule 19.08.2015
comment
См. мой ответ на Структурирование сообщений GCM в PushSharp 4.0   -  person Umut Bebek    schedule 01.12.2016
comment
См. мой ответ на Структурирование сообщений GCM в PushSharp 4.0   -  person Umut Bebek    schedule 01.12.2016
comment
См. мой ответ на Структурирование сообщений GCM в PushSharp 4.0   -  person Umut Bebek    schedule 01.12.2016
comment
См. ответ на stackoverflow. ком/вопросы/36905361/   -  person Umut Bebek    schedule 01.12.2016


Ответы (3)


Попробуйте использовать сообщение вместо предупреждения.

.WithJson(@"{""message"":""Hello World!"",""badge"":7,""sound"":""sound.caf""}"));

Как и в моем случае, служба (как и ваша) отправляла предупреждение, но клиентское устройство ожидало сообщения.

С уважением,

person Palvinder    schedule 04.06.2015

По моему опыту, я сталкивался с этой проблемой 3 раза за последние два года :)

В первый раз: мне пришлось заново сгенерировать новый ключ API GCM, я использовал его, и он сработал.

Второй раз: первое решение не сработало, я обратился к разработчику андроида, чтобы перепроверить его код, оказалось, что с его кодом что-то не так.

Третий раз: проблема была с устройством, пришлось перезагрузить устройство, после чего уведомление пришло сразу.

person Ala' Alnajjar    schedule 09.03.2015
comment
Я попробовал 3 решения, которые вы предлагаете, но ничего не работает для меня. у вас есть другие решения. Я столкнулся с точно такой же проблемой в вопросе - person Hakan Fıstık; 19.08.2015
comment
Я не уверен, что ваш случай точно такой же, может быть, было бы лучше, если бы вы разместили свой вопрос в новой теме с кодом, который вы используете. - person Ala' Alnajjar; 19.08.2015
comment
Моя проблема была решена, это было похоже на второй случай, который вы упомянули. проблема была в приложении Android - person Hakan Fıstık; 20.08.2015

Для PushSharp 4.0 вы можете сделать так

var config = new GcmConfiguration("senderKey", "apiKey", null);
config.GcmUrl = "https://fcm.googleapis.com/fcm/send"; //!!!!!gmc changed to fcm;)

var gcmBroker = new GcmServiceBroker(config);
gcmBroker.Start();

_gcmBroker.QueueNotification(new GcmNotification
                {
                    RegistrationIds = new List<string> { "YourDeviceToken" },
                    Notification = JObject.Parse(
                        "{" +
                            "\"title\" : \"" + yourMessageTitle + "\"," +
                            "\"body\" : \"" + yourMessageBody + "\"," +
                            "\"sound\" : \"mySound.caf\"" +
                        "}") ,
                    Data = JObject.Parse(
                        "{" +                            
                            "\"CustomDataKey1\" : \"" + yourCustomDataValue1 + "\"," +
                            "\"CustomDataKey2\" : \"" + yourCustomDataValue2 + "\"" +
                        "}")
                });

Я не проверял, приходят ли пользовательские значения данных, но уведомление приходит :) Элементы, начинающиеся с «вашего», — это ваши динамические аргументы, такие как параметры, которые вы передаете этому методу и т. д. Вопрос задан давно, но я начал использовать pushsharp только что :) Надеюсь, это поможет пользователям PushSharp.

person Umut Bebek    schedule 01.12.2016