AMP

amp-subscriptions

描述

实现订阅式访问协议。

 

必需的脚本

<script async custom-element="amp-subscriptions" src="https://cdn.ampproject.org/v0/amp-subscriptions-0.1.js"></script>

用法

amp-subscriptions 组件实现了订阅式的访问/付费墙规则。

运作方式

  1. AMP 页面在 AMP 查看器中加载,某些部分使用属性遮挡。
  2. AMP 运行时调用所有已配置服务的授权端点
    1. 如果所有服务都未能响应,则将使用后备授权
  3. AMP 运行时使用响应来隐藏或显示属性定义的不同部分。
  4. 在向阅读器显示文档后,AMP 运行时会调用回传端点,发布商可以使用该端点来更新倒数计数器(已使用的免费浏览次数)。
  5. 发布商可以在 AMP 文档中放置特定的操作,以便:
    1. 启动他们自己的登录页面,以验证阅读器身份,并将阅读器在其系统中的身份与AMP 阅读器 ID相关联。
    2. 启动他们自己的订阅页面,以允许阅读器购买新的订阅。
    3. 供应商服务启动登录或订阅操作。

amp-access 的关系

amp-subscriptions 组件与 amp-access 类似,并且在许多功能上都建立在 amp-access 的基础上。然而,它是访问/付费墙协议的更加专业的版本。一些主要区别是:

  1. amp-subscriptions 授权端点类似于 amp-access 授权端点,但其响应是严格定义和标准化的。
  2. 您需要使用:
  3. amp-subscriptions 组件允许为页面配置多个供应商服务,以参与访问/付费墙决策。服务会并发执行,并根据哪个服务返回肯定响应来确定优先级。
  4. AMP 查看器被允许根据与发布商的独立协议,提供一个经过签名的授权响应,作为访问证明。

由于标记的标准化、对多个提供商的支持以及改进的查看器支持,建议新的发布商和付费墙提供商实现使用 amp-subscriptions

AMP 阅读器 ID

为了帮助访问服务和用例,AMP Access 引入了阅读器 ID 的概念。

阅读器 ID 为发布商提供了一种在不泄露任何个人信息的情况下识别阅读器的解决方案。这允许发布商跟踪文章浏览量并实现计量、付费墙和其他订阅服务。

阅读器 ID 是由 AMP 生态系统创建的匿名且唯一的 ID。它对于每个阅读器/发布商对都是唯一的 - 两个不同的发布商对阅读器的识别方式不同。它是一个不可逆的 ID。它旨在本质上是随机的,并使用许多因素来实现这种不可预测性。阅读器 ID 包含在所有 AMP/发布商通信中,并且可以被发布商用来识别阅读器并将其映射到他们自己的身份系统中。

阅读器 ID 构建在用户设备上,并且旨在长期存在。但是,它遵循正常的浏览器存储规则,包括隐身窗口的规则。阅读器 ID 的预期生命周期为使用之间 1 年,或直到用户清除其 Cookie。阅读器 ID 目前不在设备之间共享。

阅读器 ID 的构建方式与构建 此处 描述的 ExternalCID 的机制类似。示例阅读器 ID 为 amp-OFsqR4pPKynymPyMmplPNMvxSTsNQob3TnK-oE3nwVT0clORaZ1rkeEz8xej-vV6

我们强烈建议使用阅读器 ID 而不是 Cookie 来识别阅读器,因为当从 CDN 加载 AMP 时,发布商 Cookie 会被视为第三方 Cookie,并且可能会被浏览器阻止。但是,如果您想在 Cookie 可用的情况下依赖 Cookie,请确保将 Cookie 正确标记为跨域 Cookie

配置

必须使用 JSON 配置来配置 amp-subscriptions 组件。

属性 描述
services <object> 的 <array> array 必须包括:
score <object> 确定在未返回有效授权时选择哪个服务。
有关更多详细信息,请参阅服务评分因素
fallbackEntitlement <object> 确定如果所有服务都未能响应授权请求,则阅读器应具有的访问级别。
有关更多详细信息,请参阅后备授权

以下是一个配置示例

<script type="application/json" id="amp-subscriptions">
  {
    "services": [
      {
        // Local service (required)
        "authorizationUrl": "https://pub.com/amp-authorisation?rid=READER_ID&url=SOURCE_URL",
        "pingbackUrl": "https://pub.com/amp-pingback?rid=READER_ID&url=SOURCE_URL",
        "actions": {
          "login": "https://pub.com/amp-login?rid=READER_ID&url=SOURCE_URL",
          "subscribe": "https://pub.com/amp-subscribe?rid=READER_ID&url=SOURCE_URL"
        }
      },
      {
        // Vendor services (optional)
        "serviceId": "service.vendor.com"
      }
    ],
    "score": {
      "supportsViewer": 10,
      "isReadyToPay": 9
    },
    "fallbackEntitlement": {
      "source": "fallback",
      "granted": true,
      "grantReason": "SUBSCRIBER",
      "data": {
        "isLoggedIn": false
      }
    }
  }
</script>

本地服务

本地服务由发布商提供,用于控制和监视对文档的访问。

它使用以下属性进行配置:

属性 描述
type “remote”或“iframe” 默认值为“remote”。“iframe”模式允许将消息传递给发布商提供的 iframe,而不是通过 CORS 请求传递给发布商提供的端点。
authorizationUrl <URL> 授权端点的 HTTPS URL。
pingbackUrl <URL> (可选)回传端点的 HTTPS URL。
pingbackAllEntitlements <boolean> (可选)是否将所有服务的授权发送到回传端点
actions.login <URL> 登录页面的 HTTPS URL。
actions.subscribe <URL> 订阅页面的 HTTPS URL。

<URL> 值指定带有替换变量的 HTTPS URL。替换变量在下面的URL 变量部分中进行了更详细的介绍。

以下是“本地”服务配置的示例

<script type="application/json" id="amp-subscriptions">
  {
    "services": [
      {
        "authorizationUrl": "https://pub.com/amp-authorisation?rid=READER_ID&url=SOURCE_URL",
        "pingbackUrl": "https://pub.com/amp-pingback?rid=READER_ID&url=SOURCE_URL",
        "pingbackAllEntitlements": true,
        "actions":{
          "login": "https://pub.com/amp-login?rid=READER_ID&url=SOURCE_URL",
          "subscribe": "https://pub.com/amp-subscribe?rid=READER_ID&url=SOURCE_URL"
        }
      },
      ...
    ]
  }
</script>

URL 变量

在配置各种端点的 URL 时,发布商可以使用替换变量。这些变量的完整列表在 HTML URL 变量替换中定义。

amp-access 添加了以下订阅特定的变量:

变量 描述
READER_ID AMP 阅读器 ID。
AUTHDATA(字段) 可用于回传和登录 URL。它允许将授权响应中的任何字段作为 URL 参数传递。例如:AUTHDATA(data.isLoggedIn)
RETURN_URL AMP 运行时指定的用于登录对话框返回的返回 URL 的占位符。

除了这些之外,以下标准 URL 替换在此组件的上下文中很有用:

SOURCE_URL 此 AMP 文档的源 URL。如果文档是从 CDN 提供的,则 AMPDOC_URL 将是 CDN URL,而 SOURCE_URL 将是原始源 URL。
AMPDOC_URL 此 AMP 文档的 URL。
CANONICAL_URL 此 AMP 文档的规范 URL。
DOCUMENT_REFERRER 引用 URL。
VIEWER AMP 查看器的 URL。
RANDOM 一个随机数。有助于避免浏览器缓存。

以下是扩展了阅读器 ID、规范 URL、引用信息和随机缓存清除器的 URL 示例:

https://pub.com/amp-authorization?
   rid=READER_ID
  &url=CANONICAL_URL
  &ref=DOCUMENT_REFERRER
  &_=RANDOM

授权端点

授权是发布商提供的,并由 AMP 运行时调用的端点。它是一个凭据 CORS GET 端点。

授权端点必须实现 AMP 中的 CORS 安全中描述的安全协议。

授权端点返回授权对象,该对象可由属性使用以隐藏或显示文档的不同部分。授权端点使用配置中的“authorizationUrl”属性指定。

授权端点返回的授权响应必须符合预定义的规范。

属性 描述
granted <boolean> 说明阅读器是否有权访问文档。
grantReason <string> 允许访问文档的原因,可识别的原因为:
  • “SUBSCRIBER”,表示用户已完全订阅。
  • “METERING”,表示用户正在使用计量。
data <object> 自由格式数据,可用于模板渲染,例如与计量或文章计数相关的消息。有关更多详细信息,请参阅自定义内容

以下是已订阅且已登录其帐户的读者响应示例

{
  "granted": true,
  "grantReason": "SUBSCRIBER",
  "data" : {
    "isLoggedIn": true
  }
}

以下是匿名读者已阅读 5 篇免费文章中的 4 篇的响应示例

{
  "granted": true,
  "grantReason": "METERING",
  "data" : {
    "isLoggedIn": false,
    "articlesRead": 4,
    "articlesLeft": 1,
    "articleLimit": 5
  }
}

以下是匿名读者因已阅读 5 篇免费文章中的 5 篇而无法访问的响应示例

{
  "granted": false,
  "data" : {
    "isLoggedIn": false,
    "articlesRead": 5,
    "articlesLeft": 0,
    "articleLimit": 5
  }
}

所有供应商服务都必须实现自己的授权端点,并符合 amp-subscriptions 响应格式

登录页面

登录页面允许发布商验证读者身份,并将他们的身份与 AMP 读者 ID 相关联。 登录页面将根据操作部分所述的 "login" 操作打开。

以下是登录页面 URL 的示例

{
  "actions": {
    "login": "https://pub.com/amp-login?rid=READER_ID&url=SOURCE_URL",
    ...
  }
}

URL 可以接受URL 变量部分中定义的任何参数。

订阅页面

订阅页面允许读者从发布商处购买订阅。订阅页面将根据操作部分所述的 "subscribe" 操作打开。

订阅页面 URL 的示例

{
  "actions": {
    "subscribe": "https://pub.com/amp-subscribe?rid=READER_ID&url=SOURCE_URL",
    ...
  }
}

URL 可以接受URL 变量部分中定义的任何参数。

回传端点

Pingback 是“本地”服务配置中提供的端点,由 AMP 运行时调用。它是一个经过身份验证的 CORS POST 端点。

注意:Pingback 端点必须实现AMP 中的 CORS 安全中描述的安全协议。

当读者开始查看文档时,AMP 运行时会自动调用此端点。Pingback 的主要目标之一是供发布商更新计量信息。

请求示例

{
  "service": "local",
  "granted": true,
  "grantReason": "METERING",
  "data": {
    "isLoggedIn": false,
    "articlesRead": 2,
    "articlesLeft": 3,
    "articleLimit": 5
  }
}

Pingback 是可选的。仅当指定“pingbackUrl”属性时才启用它。

默认情况下,作为正文,pingback POST 请求接收“获胜”授权端点返回的授权对象。但是,如果“本地”服务的配置包含 pingbackAllEntitlements: true,则正文将包含从所有服务接收到的所有授权的数组,包括那些不授予访问权限的授权。

重要提示:pingback JSON 对象以 Content-type: text/plain 发送。这是有意为之,因为它无需进行 CORS 预检检查。

将 AMP 阅读器 ID 与发布商 Cookie 结合使用

为了准确识别读者,发布商应将AMP 读者 ID 与任何与读者相关的发布商 Cookie 相关联。


注意:由于创建AMP 读者 ID的方式,同一个用户在不同的设备和浏览器上可能有多个AMP 读者 ID,因此发布商必须注意妥善处理。

“iframe”模式

在“iframe”模式下,授权和 pingback 通过向发布商提供的 iframe 发送消息来提供,而不是向指定的授权和 pingback 端点发送 CORS 请求。

在 iframe 模式下,authorzationUrlpingbackUrl 将被删除并替换为

  • “iframeSrc” - 发布商提供的 iframe
  • “iframeVars” - 要发送到 iframe 的 AMP 变量
  • “type” - 必须为“iframe”

“本地”服务在“iframe”模式下配置如下

<script type="application/json" id="amp-subscriptions">
  {
    "services": [
      {
        "type": "iframe",
        "iframeSrc": "https://...",
        "iframeVars": [
          "READER_ID",
          "CANONICAL_URL",
          "AMPDOC_URL",
          "SOURCE_URL",
          "DOCUMENT_REFERRER"
        ],
        "actions":{
          "login": "https://...",
          "subscribe": "https://..."
        }
      },
      ...
    ]
  }
</script>

“本地”服务中的属性为(远程模式)

  • “type” - 可选类型,默认为“remote”
  • “authorizationUrl” - 授权端点 URL。
  • “pingbackUrl” - pingback 端点 URL。
  • “actions” - 操作 URL 的命名映射。至少必须指定两个操作:“login”和“subscribe”。

在 iframe 模式下,authorizationUrlpingbackUrl 将被删除并替换为

  • “iframeSrc” - 发布商提供的 iframe
  • “iframeVars” - 要发送到 iframe 的 AMP 变量
  • “type” - 必须为“iframe”

有关消息传递协议的详细信息,请参阅amp-access-iframe

供应商服务

供应商服务配置必须引用 serviceId,并且可以包含供应商服务允许的任何其他属性。

<script type="application/json" id="amp-subscriptions">
  {
    "services": [
      {
        // Local service definition
      },
      {
        "serviceId": "service.vendor.com"
      }
    ]
  }
</script>

有关详细信息,请参阅供应商服务的文档。

可用供应商服务

服务评分因素

如果没有服务返回授予访问权限的授权,则会通过计算每个服务的分数来比较所有服务,并选择得分最高的服务。每个服务都有一个 "baseScore"(默认为 0)。任何服务配置中 baseScore 键中的值 < 100 表示该服务的初始分数。如果未指定 baseScore,则默认为 0

分数的计算方法是:取该服务的 baseScore,加上从 score[factorName] 配置中动态计算的权重,并乘以每个服务为该 factorName 返回的值。服务可能会为它们支持的因素返回 [-1..1] 之间的值。如果服务不知道某个因素或不支持它,则将返回 0

如果发布商希望忽略某个评分因素,则可以将其值显式设置为 0,或者从 score 映射中省略它。

可用评分因素

  1. 当服务可以与此页面视图的当前 AMP 查看器环境协作时,supportsViewer 返回 1
  2. 当服务已知该用户,并且该服务已存档某种付款方式,允许用户无需输入付款详细信息即可购买时,isReadyToPay 返回 1

所有评分因素的默认值为 0。如果平局,则本地服务获胜。

注意:如果您想在特定查看器的上下文中测试文档的行为,可以添加 #viewerUrl= 片段参数。例如,#viewerUrl=https://www.google.com 将模拟文档在 Google 查看器中的行为。

后备授权

如果所有配置的服务都无法获得授权,则 fallbackEntitlement 部分下配置的授权将用作 local 服务的备用授权。文档根据此备用授权解锁。

备用授权示例

{
  "fallbackEntitlement": {
    "source": "fallback",
    "granted": true,
    "grantReason": "SUBSCRIBER",
    "data": {
      "isLoggedIn": false
    }
  }
}

结构化数据标记

amp-subscriptions 依赖于 Schema.org 页面级配置的两个主要属性

  1. 用户必须被授予才能查看内容的产品 ID:productID
  2. 此时此内容是否需要此产品:isAccessibleForFree

可用的配置将提供带有 isAccessibleForFree 属性的 NewsArticle 类型项目和指定 productIDProduct 类型子项目。一旦找到 productIDisAccessibleForFree,就会解析配置。因此,建议将配置尽可能放在 DOM 树的较高位置。

支持 JSON-LD 和 Microdata 格式。

有关标记的更多详细信息,请参见此处

示例

在这些示例中

  1. 产品 ID 为 "norcal_tribune.com:basic"("productID": "norcal_tribune.com:basic")。
  2. 此文档当前已锁定("isAccessibleForFree": false)。

以下是使用 JSON-LD 的标记示例

<script type="application/ld+json">
  {
    "@context": "http://schema.org",
    "@type": "NewsArticle",
    "isAccessibleForFree": false,
    "publisher": {
      "@type": "Organization",
      "name": "The Norcal Tribune"
    },
    "hasPart": {...},
    "isPartOf": {
      "@type": ["CreativeWork", "Product"],
      "name" : "The Norcal Tribune",
      "productID": "norcal_tribune.com:basic"
    }
  }
</script>

以下是使用 Microdata 的标记示例

<div itemscope itemtype="http://schema.org/NewsArticle">
  <meta itemprop="isAccessibleForFree" content="false" />
  <div
    itemprop="isPartOf"
    itemscope
    itemtype="http://schema.org/CreativeWork http://schema.org/Product"
  >
    <meta itemprop="name" content="The Norcal Tribune" />
    <meta itemprop="productID" content="norcal_tribute.com:basic" />
  </div>
</div>

属性

subscription-action

为了向读者呈现特定的体验,发布商提供了在“操作”配置中声明的特定操作,并且可以使用 subscriptions-action 属性进行标记。

可用值

例如,此按钮将执行“subscribe”操作

<button subscriptions-action="subscribe" subscriptions-display="EXPR">
  Subscribe now
</button>

默认情况下,这些操作处于隐藏状态,必须使用 subscriptions-display 表达式显式显示。

subscription-service

在标记中,可以将操作委托给其他服务来执行操作。这可以通过指定 subscriptions-service 属性来实现。

可用值

  • local:这将强制 local 服务用于特定操作。
  • {serviceId} (例如 subscribe.google.com):这将强制使用 ID 为 serviceId 的服务来执行特定操作。

例如,此按钮将显示来自 subscribe.google.com 服务的订阅页面,而与服务评分因素无关

<button
  subscriptions-action="subscribe"
  subscriptions-service="subscribe.google.com"
>
  Subscribe
</button>

subscription-decorate

除了将操作委托给另一个服务之外,您还可以要求另一个服务修饰该元素。只需添加属性 subsciptions-decorate 即可获得修饰的元素。

<button
  subscriptions-decorate
  subscriptions-action="subscribe"
  subscriptions-service="subscribe.google.com"
>
  Subscribe
</button>

subscriptions-section

高级部分会根据授权/授权响应自动显示/隐藏。

可用值

  • content:用于封装高级内容。
  • content-not-granted:用于强制 local 服务用于特定操作。

例如,您应该将高级文章内容包括在 content 部分中,并将任何备用内容包括在 content-not-granted 部分中

<!-- Include non-subscriber's content in here -->
<section subscriptions-section="content-not-granted">
  You are not allowed to currently view this content.
</section>

<!-- Include subscriber's content in here -->
<section subscriptions-section="content">
  This content will be hidden unless the reader is authorized.
</section>

重要提示:不要将 subscriptions-section="content" 应用于整个页面。这样做可能会在稍后显示内容时导致可见的闪烁,并且可能会阻止您的页面被搜索引擎索引。我们建议允许在第一个视口中的内容呈现,而无论订阅状态如何。

subscriptions-display

除了显示/隐藏高级内容和备用内容之外,还有更多方法可以使用 subscriptions-display 属性自定义文档,该属性使用操作和对话框的表达式。subscriptions-display 的值是在类似 SQL 的语言中定义的布尔表达式。该语法在amp-access 附录 A中定义。

授权响应的 data 对象中的值可用于构建表达式。在此示例中,isLoggedIn 的值在 data 对象中,用于有条件地显示登录和升级帐户的 UI

<section>
  <button
    subscriptions-action="login"
    subscriptions-display="NOT data.isLoggedIn"
  >
    Login
  </button>
  <div subscriptions-actions subscriptions-display="data.isLoggedIn">
    <div>My Account</div>
    <div>Sign out</div>
  </div>
  <div
    subscriptions-actions
    subscriptions-display="data.isLoggedIn AND NOT grantReason = 'SUBSCRIBER'"
  >
    <a href="...">Upgrade your account</a>
  </div>
</section>

重要提示:请勿使用 data 来授予/拒绝内容访问权限、基于用户访问权限有条件地显示内容或显示用户或帐户相关信息。

使用评分自定义内容

每个配置的服务返回的评分因素可用于控制对话框中内容的显示。例如,factors['subscribe.google.com'].isReadyToPay 将是来自 subscribe.google.com 服务(也称为 amp-subscriptions-google)的“准备付款”评分因素。类似地,factors['local'].isReadyToPay 将用于本地服务,而 scores['subscribe.google.com'].supportsViewer 将是 Google 服务支持当前查看器的评分因素。

使用示例

<!-- Shows a Subscribe with Google button if the user is ready to pay -->
<button
  subscriptions-display="factors['subscribe.google.com'].isReadyToPay"
  subscriptions-action="subscribe"
  subscriptions-service="subscribe.google.com"
  subscriptions-decorate
>
  Subscribe with Google
</button>

subscriptions-dialog

付费墙对话框会根据授权/权利响应自动显示。

使用 subscriptions-dialogsubscriptions-display 属性标记对话框。

<div subscriptions-dialog subscriptions-display="EXPR">
  This content will be shown as a dialog when "subscription-display" expression
  matches.
</div>

指定了 subscriptions-dialog 对话框的元素也可以是 <template> 元素,在这种情况下,它将在显示为对话框之前进行初始渲染。例如:

<template type="amp-mustache" subscriptions-dialog subscriptions-display="NOT granted">
  <!-- Customise the experience for the user using the `data` object returned in the authorization response -->
  <!-- Do NOT use the `data` object to show or hide premium content as this is not always returned -->
{{^data.articlesRead}}  <p>
    You have read all of your free articles!
  </p>
{{/data.articlesRead}}{{#data.articlesRead}}  <p>
    You have read <b>{{data.articlesRead}}</b> articles.
  </p>
{{/data.articlesRead}}{{#data.articlesLeft}}  <p>
    You have <b>{{data.articlesLeft}}</b> free articles left!
  </p>
{{/data.articlesLeft}}  <button subscriptions-action="subscribe" subscriptions-service="local" subscriptions-display="true">
    Subscribe
  </button>
  <section subscriptions-display="NOT granted AND NOT data.isLoggedIn">
  <button
    subscriptions-action="login"
    subscriptions-service="local"
    subscriptions-display="NOT granted AND NOT data.isLoggedIn">
    Already subscribed?
  </button>

</template>

将显示第一个匹配 subscriptions-display 的对话框。

操作

操作在 "local" 服务配置的 "actions" 属性中提供。它是一组命名的操作。可以以这种方式配置任意数量的操作,但需要两个操作:"login""subscribe"

所有操作的工作方式相同:为指定的 URL 打开弹出窗口。在弹出窗口中打开的页面可以执行目标操作,例如登录/订阅/等等,并且它应该通过重定向到 "return" 查询参数指定的 URL 来返回。

请注意,虽然不是显式可见的,但任何供应商服务也可以实现自己的操作。或者,它可以委托给 "login" 服务来执行 "login""subscribe" 操作。

示例操作配置

"actions":{
  "login": "https://pub.com/amp-login?rid=READER_ID&url=SOURCE_URL",
  "subscribe": "https://pub.com/amp-subscribe?rid=READER_ID&url=SOURCE_URL"
}

登录

login 操作流程如下:

  1. 将向以下格式的指定 URL 发出请求:
    https://pub.com/amp-login?
      rid=READER_ID
      &url=SOURCE_URL
      &return=RETURN_URL
    
**Note:** the "return" URL parameter is added by the AMP Runtime automatically if `RETURN_URL` substitution is not specified.
  1. 登录页面将作为普通的网页打开,没有特殊的约束,只是它应该作为 浏览器对话框 运行良好。
  2. 一旦发布商验证了读者的身份,发布商应将发布商 cookie 与 AMP 阅读器 ID 相关联,如 将 AMP 阅读器 ID 与发布商 Cookie 结合使用 部分所述。
  3. 登录页面完成其工作后,必须使用以下格式重定向回指定的“返回 URL”:
    RETURN_URL#success=true|false

Notice the use of a URL hash parameter `success`. The value is either `true` or `false` depending on whether the login succeeds or is abandoned. Ideally the Login page, when possible, will send the signal in cases of both success or failure.
  1. 如果返回 success=true 信号,则 AMP 运行时将重复调用授权和回传端点,以更新文档的状态并使用新的访问配置文件报告“视图”。

当读者单击带有 subscriptions-action="login" 属性的按钮时,将触发 login 操作。例如:

<button subscriptions-action="login">
  Already subscribed? Login now
</button>

订阅

subscribe 流程如下:

  1. 将向以下格式的指定 URL 发出请求:
    https://pub.com/amp-subscribe?
      rid=READER_ID
      &url=SOURCE_URL
      &return=RETURN_URL
    
**Note:** the "return" URL parameter is added by the AMP Runtime automatically if `RETURN_URL` substitution is not specified.
  1. 订阅页面将作为普通的网页打开,没有特殊的约束,只是它应该作为 浏览器对话框 运行良好。
  2. 订阅页面完成其工作后,必须使用以下格式重定向回指定的“返回 URL”:
    RETURN_URL#success=true|false

Notice the use of a URL hash parameter `success`. The value is either `true` or `false` depending on whether the login succeeds or is abandoned. Ideally the Subscribe page, when possible, will send the signal in cases of both success or failure.
  1. 如果返回 success=true 信号,则 AMP 运行时将重复调用授权和回传端点,以更新文档的状态并使用新的访问配置文件报告“视图”。

当读者单击带有 subscriptions-action="subscribe" 属性的按钮时,将触发 subscribe 操作。例如:

<button subscriptions-action="subscribe">
  Subscribe now
</button>

分析

amp-subscriptions 组件会触发以下分析信号:

  1. subscriptions-started
  • 当初始化 amp-subscriptions 时触发。
  • 数据:无。
  1. subscriptions-service-registered
  • amp-subscriptions 能够解析服务的实例时触发。服务可以随时在页面上初始化自身。
  • 数据:所选服务的 serviceId
  1. subscriptions-service-activated
  • 当选择并激活已配置的服务以供使用时触发。请参阅 服务评分因素
  • 数据:所选服务的 serviceId
  1. subscriptions-entitlement-resolved
  • 当服务的权利获取完成时触发。
  • 数据:所选服务的 serviceIdaction
  1. subscriptions-access-granted
  • 当所选服务的权利授予对文档的访问权限时触发。
  • 数据:所选服务的 serviceId
  1. subscriptions-paywall-activated
  • 当所选服务的权利未授予对文档的访问权限时触发。
  • 数据:所选服务的 serviceId
  1. subscriptions-access-denied
  • 当所选服务的权利拒绝访问文档时触发。
  • 数据:所选服务的 serviceId
  1. subscriptions-service-re-authorized
  • 当服务的重新授权完成时触发。服务可以在执行任何操作(例如 login)后请求重新授权。重新授权完成后,将为该服务获取新的权利。
  • 数据:所选服务的 serviceId
  1. subscriptions-action-delegated
  • 在委托服务操作移交给其他服务之前触发。请参阅 [subscription-service][15]
  • 数据:所选服务的 serviceId 和委托的 action
  1. subscriptions-action-ActionName-started
  • 当操作 ActionName 的执行开始时触发。
  • 数据:无。
  1. subscriptions-action-ActionName-failed
  • 当由于任何原因导致操作 ActionName 的执行失败时触发。
  • 数据:无。
  1. subscriptions-action-ActionName-success
  • 当操作 ActionName 的执行结果报告为成功时触发。
  • 数据:无。
  1. subscriptions-action-ActionName-rejected
  • 当操作 ActionName 的执行结果报告为失败时触发。
  • 数据:无。
  1. subscriptions-link-requested
  • 当所选服务启动订阅帐户链接请求时触发。
  • 数据:所选服务的 serviceId
  1. subscriptions-link-complete
  • 当所选服务完成订阅帐户链接时触发。
  • 数据:所选服务的 serviceId
  1. subscriptions-link-canceled
  • 当所选服务启动的订阅帐户链接请求被取消时触发。
  • 数据:所选服务的 serviceId
需要更多帮助?

您已经阅读本文档十几次了,但它并没有真正涵盖您所有的问题?也许其他人也有同样的感觉:在 Stack Overflow 上与他们联系。

转到 Stack Overflow
发现错误或缺少功能?

AMP 项目强烈鼓励您的参与和贡献!我们希望您能成为我们开源社区的持续参与者,但我们也欢迎您对您特别感兴趣的问题做出一次性贡献。

转到 GitHub