AMP

重要提示:此文档不适用于您当前选择的格式 ads

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. 您需要使用以下内容,而不是使用 amp-access 访问内容标记 中描述的 amp-access-hideamp-access 属性
  3. amp-subscriptions 组件允许为页面配置多个 供应商服务,以参与访问/付费墙决策。服务并发执行,并根据哪个服务返回肯定响应进行优先级排序。
  4. AMP 查看器可以基于与发布商的独立协议,为 amp-subscriptions 提供已签名的授权响应,作为访问凭证。

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

配置

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

属性 描述
服务 <对象> 的 <数组> 数组 必须包括
评分 <对象> 确定在未返回有效授权的情况下选择哪个服务。
有关更多详细信息,请参见 服务评分因素
回退授权 <对象> 确定如果所有服务都未能响应授权请求,读者应具有的访问级别。
有关更多详细信息,请参见 回退授权

以下是配置示例

<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>

本地服务

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

它使用以下属性进行配置

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

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

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

<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(field) 可用于回传和登录 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” 属性指定。

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

属性 描述
已授权 <布尔值> 声明读者是否有权访问该文档。
grantReason <string> 授予文档访问权限的原因,已识别的原因包括
  • "SUBSCRIBER",表示用户已完全订阅。
  • "METERING",表示用户正在计量付费。
data <对象> 可用于模板渲染的自由格式数据,例如与计量或文章计数相关的消息。有关更多详细信息,请参阅自定义内容

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

{
  "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 发送消息来提供,而不是通过 CORS 请求发送到指定的授权和 pingback 端点。

在 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 属性和指定 productIDProduct 类型子项的 NewsArticle 类型项目。配置会在找到 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

为了向读者呈现特定的体验,发布者提供了在“actions”配置中声明的特定操作,并且可以使用 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 运行时将重复调用授权和 Pingback 端点,以更新文档状态并报告具有新访问配置文件的“视图”。

当阅读器点击带有 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 运行时将重复调用授权和 Pingback 端点,以更新文档状态并报告具有新访问配置文件的“视图”。

当阅读器点击带有 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