

**终止支持通知：** AWS 将于 2026 年 10 月 30 日终止对亚马逊 Pinpoint 的支持。2026 年 10 月 30 日之后，您将不再能够访问 Amazon Pinpoint 控制台或 Amazon Pinpoint 资源（端点、分段、活动、旅程和分析）。有关更多信息，请参阅 [Amazon Pinpoint 终止支持](https://docs.aws.amazon.com/console/pinpoint/migration-guide)。**注意：** APIs 与短信相关、语音、移动推送、OTP 和电话号码验证不受此更改的影响，并受 AWS 最终用户消息的支持。

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 将用户与 Amazon Pinpoint 端点关联
<a name="audience-define-user"></a>

端点可以包含定义*用户*（表示您的受众中的一个人）的属性。例如，用户可能表示已安装您的移动应用程序的某个人，或在您的网站上具有账户的某个人。

可以通过指定一个唯一用户 ID 并（可选）自定义用户属性来定义用户。如果某个人在多台设备上使用您的应用程序，或者可通过多个地址为此人发送消息，则可将同一用户 ID 分配给多个端点。在此情况下，Amazon Pinpoint 跨端点同步用户属性。因此，如果您将一个用户属性添加到一个端点，则 Amazon Pinpoint 会将该属性添加到包含相同用户 ID 的每个端点。

可以添加用户属性来跟踪适用于个人且不会因此人所用设备而变化的数据。例如，可以添加人员的姓名、年龄或账户状态属性。

**提示**  
如果您的应用程序使用 Amazon Cognito 用户池来处理用户身份验证，则 Amazon Cognito 可以将用户 ID 和属性自动添加到您的端点。对于端点用户 ID 值，Amazon Cognito 将分配已在用户池中分配给用户的 `sub` 值。要了解如何使用 Amazon Cognito 添加用户，请参阅《Amazon Cognito 开发人员指南》中的[将 Amazon Pinpoint 分析用于 Amazon Cognito 用户池](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-pinpoint-integration.html)**。

将用户定义添加到端点之后，细分受众的方式有了更多选择。可以基于用户属性定义分段，也可以通过导入用户 ID 列表来定义分段。当您向基于用户的分段发送消息时，可能的目标地址包括与分段中的每个用户关联的每个端点。

为受众发送消息的方式也有更多选择。可以使用活动为用户分段发送消息，也可以将消息直接发送到用户 ID 的列表。要个性化设置消息，可以包括将替换为用户属性值的消息变量。

## 示例
<a name="audience-define-user-example"></a>

以下示例演示如何将用户定义添加到端点。

------
#### [ AWS CLI ]

可以通过在 AWS CLI 中运行命令来使用 Amazon Pinpoint。

**Example 更新端点命令**  
要将用户添加到端点，请使用 [update-endpoint](https://docs.aws.amazon.com/cli/latest/reference/pinpoint/update-endpoint.html) 命令。对于 `--endpoint-request` 参数，可以定义一个包含用户的新端点。或者，要更新现有端点，可以只提供要更改的属性。以下示例通过仅提供用户属性来将用户添加到现有端点：  

```
$ aws pinpoint update-endpoint \
> --application-id application-id \
> --endpoint-id endpoint-id \
> --endpoint-request file://endpoint-request-file.json
```
其中：  
+ *application-id* 是要在其中添加或更新端点的 Amazon Pinpoint 项目的 ID。
+ *endpoint-id* 是要分配给新端点的 ID，或者是要更新的现有端点的 ID。
+ *endpoint-request-file.json* 是包含 `--endpoint-request` 参数输入的本地 JSON 文件的文件路径。

**Example 端点请求文件**  
示例 `update-endpoint` 命令使用 JSON 文件作为 `--endpoint-request` 形参 (parameter) 的实参 (argument)。此文件包含与下类似的用户定义：  

```
{ 
    "User":{ 
        "UserId":"example_user",
        "UserAttributes":{ 
            "FirstName":["Wang"],
            "LastName":["Xiulan"],
            "Gender":["Female"],
            "Age":["39"]
        }
    }
}
```
有关可用于定义一个用户的属性，请参阅《Amazon Pinpoint API 参考》中的 [EndpointRequest](https://docs.aws.amazon.com/pinpoint/latest/apireference/apps-application-id-endpoints-endpoint-id.html#apps-application-id-endpoints-endpoint-id-schemas) 架构中的 `User` 对象**。

------
#### [ 适用于 Java 的 AWS SDK ]

您可以通过使用 适用于 Java 的 AWS SDK 提供的客户端在您的 Java 应用程序中使用 Amazon Pinpoint API。

**Example 代码**  
要将用户添加到端点，请初始化 EndpointRequest 对象并将其传递到 `AmazonPinpoint` 客户端的 `updateEndpoint` 方法。可以使用此对象定义一个可以包含用户的新端点。或者，要更新现有端点，可以只更新要更改的属性。以下示例通过将 EndpointUser 对象添加到 EndpointRequest 对象来将用户添加到现有端点：  

```
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.pinpoint.PinpointClient;
import software.amazon.awssdk.services.pinpoint.model.EndpointRequest;
import software.amazon.awssdk.services.pinpoint.model.EndpointUser;
import software.amazon.awssdk.services.pinpoint.model.ChannelType;
import software.amazon.awssdk.services.pinpoint.model.UpdateEndpointRequest;
import software.amazon.awssdk.services.pinpoint.model.UpdateEndpointResponse;
import software.amazon.awssdk.services.pinpoint.model.PinpointException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
```

```
    public static void updatePinpointEndpoint(PinpointClient pinpoint, String applicationId, String endPointId) {
        try {
            List<String> wangXiList = new ArrayList<>();
            wangXiList.add("cooking");
            wangXiList.add("running");
            wangXiList.add("swimming");

            Map myMapWang = new HashMap<>();
            myMapWang.put("interests", wangXiList);

            List<String> myNameWang = new ArrayList<>();
            myNameWang.add("Wang ");
            myNameWang.add("Xiulan");

            Map wangName = new HashMap<>();
            wangName.put("name", myNameWang);

            EndpointUser wangMajor = EndpointUser.builder()
                    .userId("example_user_10")
                    .userAttributes(wangName)
                    .build();

            // Create an EndpointBatchItem object for Mary Major.
            EndpointRequest wangXiulanEndpoint = EndpointRequest.builder()
                    .channelType(ChannelType.EMAIL)
                    .address("wang_xiulan@example.com")
                    .attributes(myMapWang)
                    .user(wangMajor)
                    .build();

            // Adds multiple endpoint definitions to a single request object.
            UpdateEndpointRequest endpointList = UpdateEndpointRequest.builder()
                    .applicationId(applicationId)
                    .endpointRequest(wangXiulanEndpoint)
                    .endpointId(endPointId)
                    .build();

            UpdateEndpointResponse result = pinpoint.updateEndpoint(endpointList);
            System.out.format("Update endpoint result: %s\n", result.messageBody().message());

        } catch (PinpointException e) {
            System.err.println(e.awsErrorDetails().errorMessage());
            System.exit(1);
        }
    }
```

有关完整的 SDK 示例，请参阅 [GitHub](https://github.com/) 上的 [AddExampleUser.java](https://github.com/awsdocs/aws-doc-sdk-examples/blob/main/javav2/example_code/pinpoint/src/main/java/com/example/pinpoint/AddExampleUser.java)。

------
#### [ HTTP ]

可以通过直接向 REST API 发出 HTTP 请求来使用 Amazon Pinpoint。

**Example Put 包含用户定义的端点请求**  
要将用户添加到端点，请向位于以下 URI 的[端点](https://docs.aws.amazon.com/pinpoint/latest/apireference/apps-application-id-endpoints-endpoint-id.html)资源发出 `PUT` 请求：  
`/v1/apps/application-id/endpoints/endpoint-id`  
其中：  
+ *application-id* 是要在其中添加或更新端点的 Amazon Pinpoint 项目的 ID。
+ *endpoint-id* 是要分配给新端点的 ID，或者是要更新的现有端点的 ID。
在您的请求中，包含所需标头并提供 [EndpointRequest](https://docs.aws.amazon.com/pinpoint/latest/apireference/apps-application-id-endpoints-endpoint-id.html#apps-application-id-endpoints-endpoint-id-schemas) JSON 作为正文。请求正文可以定义一个可以包含用户的新端点。或者，要更新现有端点，可以只提供要更改的属性。以下示例通过仅提供用户属性来将用户添加到现有端点：  

```
PUT /v1/apps/application_id/endpoints/example_endpoint HTTP/1.1
Host: pinpoint.us-east-1.amazonaws.com
X-Amz-Date: 20180415T182538Z
Content-Type: application/json
Accept: application/json
Authorization: AWS4-HMAC-SHA256 Credential=AKIAIOSFODNN7EXAMPLE/20180501/us-east-1/mobiletargeting/aws4_request, SignedHeaders=accept;content-length;content-type;host;x-amz-date, Signature=c25cbd6bf61bd3b3667c571ae764b9bf2d8af61b875cacced95d1e68d91b4170
Cache-Control: no-cache

{ 
    "User":{ 
        "UserId":"example_user",
        "UserAttributes":{ 
            "FirstName":"Wang",
            "LastName":"Xiulan",
            "Gender":"Female",
            "Age":"39"
        }
    }
}
```
如果请求成功，将收到与下类似的响应：  

```
{
    "RequestID": "67e572ed-41d5-11e8-9dc5-db288f3cbb72",
    "Message": "Accepted"
}
```

------

## 相关信息
<a name="audience-define-user-related"></a>

有关 Amazon Pinpoint API 中的端点资源的更多信息，包括支持的 HTTP 方法和请求参数，请参阅《Amazon Pinpoint API 参考》中的[端点](https://docs.aws.amazon.com/pinpoint/latest/apireference/apps-application-id-endpoints-endpoint-id.html)**。

有关使用变量个性化设置消息的更多信息，请参阅《Amazon Pinpoint 用户指南》中的[消息变量](https://docs.aws.amazon.com/pinpoint/latest/userguide/campaigns-message.html#campaigns-message-variables.html)**。

要通过导入用户 ID 列表来定义分段，请参阅《Amazon Pinpoint 用户指南》中的[导入分段](https://docs.aws.amazon.com/pinpoint/latest/userguide/segments-importing.html)**。

有关向最多 100 个用户 ID 发送直接消息的信息，请参阅《Amazon Pinpoint API 参考》中的**[用户消息](https://docs.aws.amazon.com/pinpoint/latest/apireference/apps-application-id-users-messages.html)。

有关应用于端点的限额的信息（包括可分配的用户属性数），请参阅[端点限额](quotas.md#quotas-endpoint)。