В журнале Azure показано: Предоставленная полезная нагрузка уведомления недопустима для официального образца Xamarin.Android.

Поэтому я попытался запустить этот пример push-уведомления для Xamarin.Android http://azure.microsoft.com/en-us/documentation/articles/partner-xamarin-mobile-services-android-get-started-push./ и следуя инструкциям из документов - я его запустил. Вставка элементов работает абсолютно нормально, но push-уведомление отказывается работать.

Это ошибка, которую я получаю в Azure для push: Ошибка: 400 — предоставленная полезная нагрузка уведомления недействительна.

Кто-нибудь еще пробовал запускать этот образец на своем устройстве и пробовал использовать push-уведомления? Ошибка не сильно помогает моему делу.

В примере используется PushSharp.

Буду признателен за любую помощь. Огромное спасибо!


person Rahul Mathur    schedule 22.07.2014    source источник


Ответы (1)


Вот как я отправляю push-уведомление в Google Cloud Messaging с внутреннего сервера.

public async Task<bool> SendNotification(int id, int index, string from, string text, string tag)
{
    try
    {
        var payload = new
        {
            data = new
            {
                message = new
                {
                    // this part can be anything you want
                    id,
                    index,
                    from,
                    text,
                    when = DateTime.UtcNow.ToString("s") + "Z"
                }
            }
        };

        var json = JsonConvert.SerializeObject(payload);

        await _hubClient.SendGcmNativeNotificationAsync(json, tag);

        return true;
    }
    catch (ArgumentException ex)
    {
        // This is expected when an APNS registration doesn't exist.
        return false;
    }

Затем в службе намерений вашего приложения вы можете проанализировать «сообщение» JSON:

protected override void OnMessage(Context context, Intent intent)
{
    var message = intent.Extras.GetString("message");

    // message is JSON payload
    // { "id":"someid", "index":"1", "text":"some text","from"... }

    var json = JObject.Parse(message);
    var id = json["id"].ToString();
    var index = json["index"].ToString();
    var text = json["text"].ToString();
    var from = json["from"].ToString();
    var when = DateTime.Parse(json["when"].ToString());

    // do whatever you want with your values here

}
person Kiliman    schedule 22.07.2014
comment
Эй, серверная часть IS azure — см. пример, который я привел выше. Мне удалось решить эту проблему и получить журнал успешных уведомлений Push, однако метод OnMessage никогда не вызывается. Любые идеи? - person Rahul Mathur; 22.07.2014
comment
Вы зарегистрировали свое устройство при запуске? - person Kiliman; 23.07.2014
comment
Да, журналы показывают, что устройство зарегистрировано. Сервер сообщает, что push был отправлен, однако Onmessage() никогда не вызывается. - person Rahul Mathur; 23.07.2014