使用Amazon pinpiont以编程方式发送推送通知

时间:2018-11-22 19:36:38

标签: android push-notification firebase-cloud-messaging boto3 aws-pinpoint

我正在尝试通过Amazon pinpoint使用GCM / FCM将推送通知发送到android设备。我可以发送消息,并且可以在模拟器中调试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))
})

请注意,令牌是有效令牌,应用程序ID是有效的。

我不确定是否要在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 :(得分:0)

使用一些参数再次播放。这些参数集起作用。我的假设是,当发现不同用例的替代项时,精确的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))
})