Отправка push-уведомлений с помощью Amazon pinpiont программно - PullRequest
0 голосов
/ 22 ноября 2018

Я пытаюсь отправить push-уведомление на устройство Android с помощью GCM / FCM через Amazon Pinpoint.Я могу отправить сообщение и вижу его при отладке приложения Android в эмуляторе, но данные сообщения пусты.Не уверен, как я могу отладить то, что мне не хватает.

Я использую boto для отправки сообщения.Вот пример сообщения.

response = client.get_gcm_channel(ApplicationId='*****')

    responseSendMsg = client.send_messages(
        ApplicationId='*****',
        MessageRequest={'Addresses': {
        '<token>': {
            'BodyOverride': 'string',
            'ChannelType': 'GCM',
            'Context': {
                'string': 'string'
            },
            'RawContent': 'Raw value of message',
            'Substitutions': {
                'string': [
                    'string',
                ]
            },
            'TitleOverride': 'Title from API'
        }
    },
    'Context': {
        'tKey': 'tValue'
    },
    'MessageConfiguration': {
        'GCMMessage': {
            'Action': 'OPEN_APP',
            'Body': 'Message from message configuration',
            'Data': {
                'testDataKey': 'testDataValue'
            },
            'IconReference': 'ic_launchstringer.png',
            'ImageIconUrl': 'string',
            'ImageUrl': 'string',
            'Priority': 'High',
            'RawContent': 'test raw content',
            'RestrictedPackageName': 'string',
            'SilentPush': True,
            'SmallImageIconUrl': 'string',
            'Sound': 'string',
            'Substitutions': {
                'string': [
                    'string',
                ]
            },
            'TimeToLive': 36000,
            'Title': 'Title from message configuration',
            'Url': 'string'
        }
    },
    'TraceId': 'test Trace Id' + str(round(time.time()*1000))
})

Обратите внимание, что токен является допустимым токеном, а идентификатор приложения действителен.

Что я не уверен, так ли я устанавливаю правильные параметры в API?Я прочитал документацию и добавил все, что мне показалось необходимым.

Сообщение на стороне Android получено, но data пусто.

Вот код стороны Android.Я расширяю FirebaseMessagingService и зарегистрировал службу в манифесте в соответствии с документацией по настройке AWS.

@Override
    public void onMessageReceived(RemoteMessage remoteMessage) {
        super.onMessageReceived(remoteMessage);
        Log.d(TAG, "Message: " + remoteMessage.getData());

        final NotificationClient notificationClient = HomeActivity.getPinpointManager(getApplicationContext()).getNotificationClient();

        final HashMap<String, String> dataMap1 = new HashMap<>(remoteMessage.getData());

        final NotificationDetails notificationDetails = NotificationDetails.builder()
                .from(remoteMessage.getFrom())
                .mapData(remoteMessage.getData())
                .intentAction(NotificationClient.FCM_INTENT_ACTION)
                .build();

        NotificationClient.CampaignPushResult pushResult = notificationClient.handleCampaignPush(notificationDetails);

        if (!NotificationClient.CampaignPushResult.NOT_HANDLED.equals(pushResult)) {
            /**
             The push message was due to a Pinpoint campaign.
             If the app was in the background, a local notification was added
             in the notification center. If the app was in the foreground, an
             event was recorded indicating the app was in the foreground,
             for the demo, we will broadcast the notification to let the main
             activity display it in a dialog.
             */
            if (NotificationClient.CampaignPushResult.APP_IN_FOREGROUND.equals(pushResult)) {
                /* Create a message that will display the raw data of the campaign push in a dialog. */
                final HashMap<String, String> dataMap = new HashMap<>(remoteMessage.getData());
                broadcast(remoteMessage.getFrom(), dataMap);
            }
            return;
        }
    }

Будет очень полезно, если кто-то использовал этот API и может указать мне пример, который напрямую вызываетAPI или через какой-либо клиентский пакет.

ПРИМЕЧАНИЕ. Я могу отправить сообщение, используя консоль AWS и используя тот же токен, который использую со своего собственного сервера.

Дайте мне знать, если у вас естьлюбые вопросы.

1 Ответ

0 голосов
/ 22 ноября 2018

Воспроизводится снова с некоторыми параметрами.Этот набор параметров работает.Мое предположение состоит в том, что api не может отправлять данные в FCM, когда он видит переопределения для разных вариантов использования.Команды AWS должны добавить эту документацию в явном виде, что требуется, а не использовать их API.В любом случае, кому-то может быть полезно для отладки.

    response = client.get_gcm_channel(ApplicationId='*****')

    responseSendMsg = client.send_messages(
        ApplicationId='*****',
        MessageRequest={'Addresses': {
        '<token>': {
            'ChannelType': 'GCM',
            'TitleOverride': 'Title from API'
        }
    },
    'MessageConfiguration': {
        'GCMMessage': {
            'Action': 'OPEN_APP',
            'Body': 'Message from message configuration',
            'Priority': 'High',
            'SilentPush': False,
            'TimeToLive': 36000,
            'Title': 'Title from message configuration'
        }
    },
    'TraceId': 'test Trace Id' + str(round(time.time()*1000))
})
...