如何通过 Amazon SNS 推送通知在负载中发送额外参数 [英] How to send Extra parameters in payload via Amazon SNS Push Notification

查看:22
本文介绍了如何通过 Amazon SNS 推送通知在负载中发送额外参数的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这是我要问的新问题,因为我在 SO 上没有得到任何答案.

This is something new i am asking as i haven't got it any answers for it on SO.

我正在使用 Amazon SNS Push 向我注册的设备发送推送,一切正常,我可以在第一次启动时在我的应用程序上注册设备,可以发送推送等.我面临的问题是,我想打开当我通过推送打开我的应用程序时的特定页面.我想用有效载荷发送一些额外的参数,但我无法做到这一点.

I am using Amazon SNS Push for sending push to my registered devices, everything is working good, i can register devices on my app first start, can send push etc etc. The problem i am facing is that, i want to open a specific page when i open my app through push. I want to send some extra params with the payload but i am not able to do that.

我试过这个链接:-http://docs.aws.amazon.com/sns/latest/api/API_Publish.html

我们只有一个键,即消息",据我所知,我们可以在其中传递有效负载.

we have only one key i.e. "Message", in which we can pass the payload as far as i know.

我想传递这样的有效载荷:-

i want pass a payload like this :-

{
    aps = {
            alert = "My Push text Msg";
          };
    "id" = "123",
    "s" = "section"
}

或任何其他格式都可以,我只想传递 2-3 个值以及有效负载,以便我可以在我的应用中使用它们.

or any other format is fine, i just wanted to pass 2-3 values along with payload so that i can use them in my app.

我用于发送推送的代码是:-

The code i am using for sending push is :-

// Load the AWS SDK for PHP
if($_REQUEST)
{
    $title=$_REQUEST["push_text"];

    if($title!="")
    {
        require 'aws-sdk.phar';


        // Create a new Amazon SNS client
        $sns = AwsSnsSnsClient::factory(array(
            'key'    => '...',
            'secret' => '...',
            'region' => 'us-east-1'
        ));

        // Get and display the platform applications
        //print("List All Platform Applications:
");
        $Model1 = $sns->listPlatformApplications();

        print("
</br></br>");*/

        // Get the Arn of the first application
        $AppArn = $Model1['PlatformApplications'][0]['PlatformApplicationArn'];

        // Get the application's endpoints
        $Model2 = $sns->listEndpointsByPlatformApplication(array('PlatformApplicationArn' => $AppArn));

        // Display all of the endpoints for the first application
        //print("List All Endpoints for First App:
");
        foreach ($Model2['Endpoints'] as $Endpoint)
        {
          $EndpointArn = $Endpoint['EndpointArn'];
          //print($EndpointArn . "
");
        }
        //print("
</br></br>");

        // Send a message to each endpoint
        //print("Send Message to all Endpoints:
");
        foreach ($Model2['Endpoints'] as $Endpoint)
        {
          $EndpointArn = $Endpoint['EndpointArn'];

          try
          {
            $sns->publish(array('Message' => $title,
                    'TargetArn' => $EndpointArn));

            //print($EndpointArn . " - Succeeded!
");
          }
          catch (Exception $e)
          {
            //print($EndpointArn . " - Failed: " . $e->getMessage() . "!
");
          }
        }
    }
}
?>

任何帮助或想法将不胜感激.提前致谢.

Any help or idea will be appreciated. Thanks in advance.

推荐答案

这里仍然缺乏 Amazon SNS 文档,几乎没有关于如何格式化消息以使用自定义负载的指示.此常见问题解答 说明了如何操作,但没有提供示例.

The Amazon SNS documentation is still lacking here, with few pointers on how to format a message to use a custom payload. This FAQ explains how to do it, but doesn't provide an example.

解决方案是使用设置为 jsonMessageStructure 参数和 json 编码的 Message 参数发布通知,并带有一个每个传输协议的密钥.作为后备,也总是需要一个 default 键.

The solution is to publish the notification with the MessageStructure parameter set to json and a Message parameter that is json-encoded, with a key for each transport protocol. There always needs to be a default key too, as a fallback.

这是带有自定义负载的 iOS 通知示例:

This is an example for iOS notifications with a custom payload:

array(
    'TargetArn' => $EndpointArn,
    'MessageStructure' => 'json',
    'Message' => json_encode(array(
        'default' => $title,
        'APNS' => json_encode(array(
            'aps' => array(
                'alert' => $title,
            ),
            // Custom payload parameters can go here
            'id' => '123',
            's' => 'section'
        ))

    ))
);

其他协议也是如此.json_encoded 消息的格式必须是这样的(但是如果不使用传输,可以省略keys):

The same goes for other protocols as well. The format of the json_encoded message must be like this (but you can omit keys if you don't use the transport):

{ 
    "default": "<enter your message here>", 
    "email": "<enter your message here>", 
    "sqs": "<enter your message here>", 
    "http": "<enter your message here>", 
    "https": "<enter your message here>", 
    "sms": "<enter your message here>", 
    "APNS": "{"aps":{"alert": "<message>","sound":"default"} }", 
    "APNS_SANDBOX": "{"aps":{"alert": "<message>","sound":"default"} }", 
    "GCM": "{ "data": { "message": "<message>" } }", 
    "ADM": "{ "data": { "message": "<message>" } }" 
}

这篇关于如何通过 Amazon SNS 推送通知在负载中发送额外参数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆