">文档:<amp-subscriptions> - amp.dev - AMP 框架
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 运行时将调用 Pingback 端点,发布者可以使用该端点来更新倒计时器(已使用的免费浏览次数)。
  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-subscriptions

AMP Reader 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 来识别读者,因为当 AMP 从 CDN 加载时,发布商 Cookie 被视为第三方 Cookie,并且可能会被浏览器阻止。但是,如果您希望在 Cookie 可用时依赖 Cookie,请务必将 Cookie 正确标记为跨源 Cookie

配置

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

属性 描述
services <array> of <object> 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> (可选)Pingback 端点的 HTTPS URL。
pingbackAllEntitlements <boolean> (可选)是否将所有服务的权利发送到Pingback 端点
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(field) 可用于 Pingback 和登录 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 安全性 中描述的安全协议。

授权端点返回 属性 可用于隐藏或显示文档的不同部分的权限对象。授权端点使用 config 中的“authorizationUrl”属性指定。

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

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

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

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

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

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

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

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

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

登录页面

登录页面允许发布商对 Reader 进行身份验证,并将他们的身份与 AMP Reader ID 关联起来。登录页面将根据 操作 部分中所述的 "login" 操作而打开。

以下是登录页面 URL 的示例

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

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

订阅页面

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

订阅页面 URL 的示例

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

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

Pingback 端点

Pingback 是“本地”服务配置中提供的端点,由 AMP 运行时调用。它是一个凭据 CORS POST 端点。

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

当 Reader 开始查看文档时,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 Reader ID 与发布商 Cookie 结合使用

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


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

"iframe" 模式

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

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

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

“local”服务在“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>

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

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

以下是使用微数据标记的示例

<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 属性进行标记。

可用值

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

<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 的对话框。

操作

操作在 "actions" 属性中以 "local" 服务配置中提供。它是一组命名的操作。可以通过这种方式配置任意数量的操作,但需要两个操作:"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