Мне удалось настроить мобильное приложение для Android на получение сообщений, созданных с помощью консоли Pinpoint Campaign (https://console.aws.amazon.com/pinpoint/home) на конкретное устройство, нацелив сегмент на настраиваемый атрибут, который есть только на этом устройстве.
Конфигурация кампании Pinpoint
- Мобильный push-канал
- Стандартная кампания
- Сегмент определен с использованием настраиваемых атрибутов, задержка 0%
- Беззвучное уведомление
- Пользовательский JSON
- Запустить немедленно
Теперь я хотел бы реализовать эту функцию в своем приложении Java, используя API SDK, и нацелить на конечную точку Pinpoint устройства.
GetEndpointRequest getEndpointRequest = new GetEndpointRequest()
.withApplicationId(appId)
.withEndpointId(endpointId);
GetEndpointResult endpointResult = getAmazonPinpointClient().getEndpoint(getEndpointRequest);
DirectMessageConfiguration directMessageConfiguration =
new DirectMessageConfiguration().withGCMMessage(new GCMMessage().withBody(body).withSilentPush(true).withAction(Action.OPEN_APP));
AddressConfiguration addressConfiguration = new AddressConfiguration().withChannelType(ChannelType.GCM);
MessageRequest messageRequest = new MessageRequest().withMessageConfiguration(directMessageConfiguration)
.addAddressesEntry(endpointResponse.getAddress(), addressConfiguration);
SendMessagesRequest sendMessagesRequest = new SendMessagesRequest()
.withApplicationId(appId)
.withMessageRequest(messageRequest);
«Тело» - это тот же самый JSON, который я вставил в консоль Pinpoint Campaign. Когда я запускаю это, я возвращаю DeliveryStatus УСПЕШНО, но устройство никогда не получает сообщение.
{ApplicationId: MY_APP_ID,Result: {clrVUcv-AwA:APA91bHGXkxpDJiw5kOMROA2XTJXuKreMklq9jemHO_KGYTIw6w84Fw9zLv9waMgLgha61IR-kZxgmrnFu-OGp8l6WFgp4Wolh4oOvZwMobGYNgzivv3bGIK83t-e4hiLx1TTaEIeRdQ={DeliveryStatus: SUCCESSFUL,StatusCode: 200,StatusMessage: {"multicast_id":4803589342422496921,"success":1,"failure":0,"canonical_ids":0,"results":[{"message_id":"0:1515105369948916%c551fa42f9fd7ecd"}]},}}}
Я также пробовал это через интерфейс командной строки AWS:
aws pinpoint send-messages --application-id MY_APP_ID --message-request "{\"Addresses\":{\"clrVUcv-AwA:APA91bHGXkxpDJiw5kOMROA2XTJXuKreMklq9jemHO_KGYTIw6w84Fw9zLv9waMgLgha61IR-kZxgmrnFu-OGp8l6WFgp4Wolh4oOvZwMobGYNgzivv3bGIK83t-e4hiLx1TTaEIeRdQ\":{\"ChannelType\":\"GCM\"}},\"MessageConfiguration\":{\"GCMMessage\":{\"Body\":\"{\\\"message\\\":\\\"stuff\\\"}\",\"SilentPush\":true}}}"
с аналогичным результатом (получите код состояния 200 и DeliveryStatus УСПЕШНО, но приложение никогда не получит). Я попытался использовать «Прямое» сообщение в консоли AWS Pinpoint, но похоже, что они не поддерживают тот же формат (принудительное действие и заголовок / сообщение вместо тихого push-сообщения с настраиваемым JSON).
Я неправильно получаю конечную точку? Как перевести указанную выше кампанию в сообщение? Я вижу, что есть вызов API sendUserMessages (), но это не кажется правильным (я не смог найти, где указать конкретную конечную точку пользователя)?
Клиент получает кампанию через зарегистрированный Сервис:
public class PushListenerService extends GcmListenerService {
@Override
public void onMessageReceived(final String from, final Bundle data) {
AWSMobileClient.initializeMobileClientIfNecessary(this.getApplicationContext());
final NotificationClient notificationClient = AWSMobileClient.defaultMobileClient()
.getPinpointManager().getNotificationClient();
NotificationClient.CampaignPushResult pushResult =
notificationClient.handleGCMCampaignPush(from, data, this.getClass());
Log.e(LOG_TAG, " onMessageReceived - got messages" + data);
Отправляются ли прямые сообщения GCM с помощью одного и того же метода кампании или мне нужно регистрировать другую службу для их обработки?
aws pinpoint send-messages --application-id MY_APP_ID --message-request "{\"Context\":{},\"MessageConfiguration\":{\"DefaultMessage\":{\"Body\":\"Test from default message\",\"Substitutions\":{}},\"DefaultPushNotificationMessage\":{},\"APNSMessage\":{},\"GCMMessage\":{\"Data\":{\"message\":\"test\"},\"SilentPush\":true},\"BaiduMessage\":{},\"ADMMessage\":{},\"SMSMessage\":{}},\"Addresses\":{\"MY_ENDPOINT_ID\":{\"ChannelType\":\"GCM\"}},\"Endpoints\":{}}"
- person Mark B   schedule 05.01.2018