如何将 Cognito 连接到 Pinpoint 进行分析?

How do you connect Cognito to Pinpoint for analytics?

我正在尝试获取 Cognito 用户池的一些基本分析。这看起来很简单,我在 Pinpoint 中创建了一个项目,然后转到我的用户池,转到常规设置 > 分析,单击添加分析按钮,选择我的应用程序使用的 Amazon Cognito 应用程序客户端,指向 Pinpoint我刚刚创建的项目,选中“共享用户配置文件数据”复选框(虽然我认为这不是绝对必要的),并且它有消息告诉我是否会使用 IAM 角色等等。单击“保存”,没有错误,我假设此时我会开始在 Pinpoint 中看到 Analytics,但绝对没有任何显示 up.I 确实有一条消息说我还没有启用任何功能,但我没有看到我需要启用的任何功能。我现在不关心活动,然后在应用程序分析下,它似乎适合您手动更新您的移动或网络应用程序以发送内容,但我认为那是如果您需要自定义内容。我错了吗?这种集成是否仅在您更改网络应用程序以明确将内容发送到 Pinpoint 时才有效?我只是假设如果我连接 Cognito 和 Pinpoint,分析会显示,因为 Cognito 显然知道人们正在登录,而您不需要手动发出一些额外的请求。

根据我的研究,我发现由于您使用的是 Web 应用程序而不使用 AWS Amplify 框架,因此您需要向您的应用程序添加额外的代码行,以便将 Cognito 身份验证分析数据发送到您的 Amazon Pinpoint 项目.

  1. 如果您使用的是 Javascript SDK,您可以将 initate-Auth property 代码片段添加到您的前端应用程序中:

     var cognitoidentityserviceprovider = new AWS.CognitoIdentityServiceProvider();
    
     var params = {
       AuthFlow: "USER_PASSWORD_AUTH",
       ClientId: 'STRING_VALUE', /* the client ID attached to the Pinpoint project */
       AuthParameters: {
         'USERNAME': 'STRING_VALUE',
         'PASSWORD': 'STRING_VALUE'
       },
       AnalyticsMetadata: {
         AnalyticsEndpointId: 'STRING_VALUE' /* the Pinpoint project ID */
       },
     };
     cognitoidentityserviceprovider.initiateAuth(params, function(err, data) {
       if (err) console.log(err, err.stack); // an error occurred
       else     console.log(data);           // successful response
     });
    
  • 在上面的代码片段中,当客户端进行 API 调用时,Pinpoint project/application ID 被添加为“AnalyticsMetadata”参数的一部分(例如登录、注册等)到 Cognito 用户池。因此,API 调用将附加 pinpoint 项目 ID,Cognito 可以使用该信息将数据发送到您的 Pinpoint 项目。如果没有这个关键步骤,分析数据将不会发送到 Pinpoint,并且会导致您所描述的行为。
  1. 如果使用 CLI(用于 verification/testing 目的),您可以执行下面的 AWS CLI initiate-auth 命令:

    $ aws cognito-idp initiate-auth --auth-flow USER_PASSWORD_AUTH --auth-parameters USERNAME=STRING_VALUE,PASSWORD=STRING_VALUE --client-id STRING_VALUE --analytics-metadata AnalyticsEndpointId=STRING_VALUE
    

要点是:

Amazon Cognito integration with Amazon Pinpoint only works for apps (clients) that are using Cognito SDK for Mobile Apps (AWS Mobile SDKs or JavaScript - AWS Amplify JavaScript library).

请注意 syumaK 的回复,是的,您需要更新代码的 initAuth 调用以包含 AnalyticsMetadat 属性。但是,我发现 AnalyticsEndpointId 不应该是 Pinpoint 项目 ID。

我相信,由于您已经将 Cognito 配置为与 pinpoint 项目集成,它已经知道您正在向哪个 pinpoint 项目发送指标。 AnalyticsEndpointId 应该是登录的唯一标识符。

这里的文档绝对是不稳定的。来自 syumaK 的 cli 对它的描述似乎与 Cognito API Reference

不同

我遇到的情况是,我用了pinpoint project id,当我用多个用户登录时,它认为是同一个。每日活跃用户保持在一个。 AWS Support 澄清说它应该是每个用户的唯一标识符。所以在将 id 更改为用户的电子邮件后,我开始获得每日活跃用户的准确数字。

这似乎与不使用移动应用程序或 Amplify 的 Cognito SDK 一样有用。您只能获取 daily/monthly 活跃用户、身份验证指标等信息。您无法按细分等进一步细分