重要事項:本文件不適用於您目前選取的格式 廣告!
amp-access
說明
提供 AMP 付費牆和訂閱支援。
必要指令碼
<script async custom-element="amp-access" src="https://cdn.ampproject.org/v0/amp-access-0.1.js"></script>
AMP Access 或「AMP 付費牆和訂閱支援」讓發布商可以根據讀者的訂閱狀態、瀏覽次數和其他因素,控制讀者可以存取哪些內容以及受到哪些限制。
與 amp-subscriptions 的關係
amp-subscriptions
擴充功能提供與 amp-access
類似的功能。然而,它支援更專業的存取權付費牆協定。以下是一些值得注意的差異:
amp-subscriptions
授權回應與 amp-access 授權類似,但前者經過嚴格定義和標準化。amp-subscriptions
擴充功能允許多個服務設定頁面,以參與存取權/付費牆決策。這些服務會同時執行,並根據哪個服務傳回正面回應來決定優先順序。- AMP 檢視器可以根據與發布商的獨立協議,向
amp-subscriptions
提供已簽署的授權回應,作為存取權證明。 - 在
amp-subscriptions
中,內容標記已標準化,讓應用程式和檢索器可以輕鬆偵測優質內容區塊。
由於標記的標準化、多供應商支援和改進的檢視器支援,建議新的發布商和付費牆供應商實作使用 amp-subscriptions
。
解決方案
建議的解決方案讓發布商可以控制下列決策和流程:
- 建立和維護使用者
- 計量控制 (允許一定數量的免費瀏覽次數)
- 負責登入流程
- 負責驗證使用者身分
- 負責存取規則和授權
- 在每個文件基礎上,彈性調整存取參數
此解決方案包含下列元件:
- AMP Reader ID (AMP 讀者 ID):由 AMP 生態系統提供,這是 AMP 所看到的讀者專屬識別碼。
- Access Content Markup (存取內容標記):由發布商編寫,定義在哪些情況下文件的哪些部分可見。
- Authorization endpoint (授權端點):由發布商提供,傳回說明讀者可以取用文件中哪些部分的回應。
- Pingback endpoint (回傳端點):由發布商提供,用於傳送文件的「瀏覽」曝光。
- Login Link (登入連結) 和 Login Page (登入頁面):允許發布商驗證讀者身分,並將其身分與 AMP Reader ID (AMP 讀者 ID) 連結。
Google AMP Cache (Google AMP 快取) 會將文件傳回給讀者,並使用 Access Content Markup (存取內容標記) 遮蔽某些區塊。AMP Runtime (AMP 執行階段) 會呼叫 Authorization endpoint (授權端點),並使用回應來隱藏或顯示 Access Content Markup (存取內容標記) 所定義的不同區塊。在文件顯示給讀者後,AMP Runtime (AMP 執行階段) 會呼叫 Pingback endpoint (回傳端點),發布商可以使用此端點來更新倒數計量器 (已使用的免費瀏覽次數)。
此解決方案也允許發布商在 AMP 文件中放置一個登入連結,啟動登入/訂閱頁面,發布商可以在其中驗證讀者身分,並將讀者在其系統中的身分與 AMP Reader ID (AMP 讀者 ID) 建立關聯。
在其基本形式中,此解決方案會將完整 (但已遮蔽) 的文件傳送給讀者,並根據授權回應簡單地顯示/隱藏受限制的區塊。但是,此解決方案也提供「伺服器」選項,其中受限制的區塊可以從初始文件傳遞中排除,並在授權確認後才下載。
支援 AMP Access (AMP 存取權) 需要發布商實作上述元件。Access Content Markup (存取內容標記) 和 Authorization endpoint (授權端點) 是必要的。Pingback endpoint (回傳端點) 和 Login Page (登入頁面) 則是選用的。
AMP Reader ID (AMP 讀者 ID)
為了協助存取權服務和使用案例,AMP Access (AMP 存取權) 引入了 Reader ID (讀者 ID) 的概念。
Reader ID (讀者 ID) 是由 AMP 生態系統建立的匿名且唯一的 ID。對於每個讀者/發布商配對而言,它是唯一的 - 針對兩位不同的發布商,讀者的識別方式會有所不同。這是一個不可逆的 ID。Reader ID (讀者 ID) 包含在所有 AMP/發布商通訊中,並且具有非常高的熵。發布商可以使用 Reader ID (讀者 ID) 來識別讀者,並將其對應到自己的身分系統。
Reader ID (讀者 ID) 是在使用者裝置上建構的,旨在長期存在。但是,它遵循正常的瀏覽器儲存規則,包括無痕視窗的規則。Reader ID (讀者 ID) 的預期生命週期為使用間隔 1 年或直到使用者清除 Cookie 為止。Reader ID (讀者 ID) 目前不會在裝置之間共用。
Reader ID (讀者 ID) 的建構方式與 此處 描述的用於建構 ExternalCID 的機制類似。Reader ID (讀者 ID) 的範例為 amp-OFsqR4pPKynymPyMmplPNMvxSTsNQob3TnK-oE3nwVT0clORaZ1rkeEz8xej-vV6
。
AMP Access (AMP 存取權) 與 Cookie
發布商可以使用自己的驗證 Cookie,也可以依賴 Reader ID (讀者 ID),或兩者結合使用。
Access Content Markup (存取內容標記)
Access Content Markup (存取內容標記) 會根據 Authorization endpoint (授權端點) 傳回的授權回應,決定哪些區塊可見或隱藏。它是透過特殊的標記屬性來描述的。
Authorization Endpoint (授權端點)
Authorization (授權) 是由發布商提供的端點,並由 AMP Runtime (AMP 執行階段) 或 Google AMP Cache (Google AMP 快取) 呼叫。它是一個具備憑證的 CORS GET 端點。此端點會傳回存取參數,Content Markup (內容標記) 可以使用這些參數來隱藏或顯示文件的不同部分。
Pingback Endpoint (回傳端點)
Pingback (回傳) 是由發布商提供的端點,並由 AMP Runtime (AMP 執行階段) 或 Google AMP Cache (Google AMP 快取) 呼叫。它是一個具備憑證的 CORS POST 端點。當讀者開始瀏覽文件時,AMP Runtime (AMP 執行階段) 會自動呼叫此端點。在讀者成功完成登入流程後,也會呼叫此端點。Pingback (回傳) 的主要目標之一是讓發布商更新計量資訊。
Pingback (回傳) 是選用的。可以將 noPingback
設定屬性設為 true
來停用。
Login Page (登入頁面) 與 Login Link (登入連結)
Login Page (登入頁面) 由發布商實作和提供服務,並由 AMP Runtime (AMP 執行階段) 呼叫。它通常以瀏覽器對話方塊的形式顯示。
當讀者點擊發布商可以放置在文件中任何位置的 Login Link (登入連結) 時,會觸發 Login Page (登入頁面)。
規格 v0.1
設定
所有端點都在 AMP 文件中設定為文件 HEAD 中的 JSON 物件
<script id="amp-access" type="application/json"> { "property": value, ... } </script>
在此設定中定義了下列屬性:
屬性 | 值 | 說明 |
---|---|---|
authorization (授權) | <網址> | Authorization endpoint (授權端點) 的 HTTPS 網址。 |
pingback (回傳) | <網址> | Pingback endpoint (回傳端點) 的 HTTPS 網址。 |
noPingback (無回傳) | true/false (真/假) | 若為 true (真),則停用回傳。 |
login (登入) | <網址> 或 <Map[字串,網址]> | Login Page (登入頁面) 的 HTTPS 網址,或不同類型登入頁面的一組網址。 |
authorizationFallbackResponse (授權備用回應) | <物件> | 授權回應失敗時,用來取代授權回應的 JSON 物件。 |
authorizationTimeout (授權逾時) | <數字> | 逾時 (以毫秒為單位),超過此時間後,授權請求會被視為失敗。預設值為 3000。只有在開發環境中才允許大於 3000 的值。 |
類型 | 「client (用戶端)」或「server (伺服器)」 | 預設值為「client (用戶端)」。「server (伺服器)」選項仍在設計討論中,準備就緒後將更新這些文件。 |
namespace (命名空間) | 字串 | 預設值為空字串。如果指定多個存取權提供者,則命名空間為必要項目。 |
<網址> 值指定具有替換變數的 HTTPS 網址。替換變數在下方的「Access URL Variables (存取網址變數)」章節中有更詳細的說明。
以下是 AMP Access (AMP 存取權) 設定的範例:
<script id="amp-access" type="application/json"> { "authorization": "https://pub.com/amp-access?rid=READER_ID&url=SOURCE_URL", "pingback": "https://pub.com/amp-ping?rid=READER_ID&url=SOURCE_URL", "login": "https://pub.com/amp-login?rid=READER_ID&url=SOURCE_URL", "authorizationFallbackResponse": {"error": true} } </script>
多個存取權提供者
可以使用陣列而不是單一物件來指定多個存取權提供者,並為每個項目提供 namespace (命名空間)
。
<script id="amp-access" type="application/json"> [ { "property": value, ... "namespace": value }, ... ] </script>
Access URL Variables (存取網址變數)
在設定各種端點的網址時,發布商可以使用替換變數。這些變數的完整清單定義在 AMP Var Spec (AMP 變數規格) 中。此外,此規格還新增了一些存取權專用變數,例如 READER_ID
和 AUTHDATA
。下表說明了一些最相關的變數:
變數 | 說明 |
---|---|
READER_ID | AMP Reader ID (AMP 讀者 ID)。 |
AUTHDATA(欄位) | 授權回應中欄位的值。 |
RETURN_URL | AMP 執行階段針對要返回的登入對話方塊所指定的返回網址的預留位置。 |
SOURCE_URL | 此 AMP 文件的來源網址。如果文件是從 CDN 提供服務,則 AMPDOC_URL 將會是 CDN 網址,而 SOURCE_URL 將會是原始來源網址。 |
AMPDOC_URL | 此 AMP 文件的網址。 |
CANONICAL_URL | 此 AMP 文件的標準網址。 |
DOCUMENT_REFERRER | 參照網址。 |
VIEWER | AMP 檢視器的網址。 |
RANDOM | 隨機數字。有助於避免瀏覽器快取。 |
以下是使用 Reader ID (讀者 ID)、標準網址、參照資訊和隨機快取清除器擴充網址的範例:
https://pub.com/access? rid=READER_ID &url=CANONICAL_URL &ref=DOCUMENT_REFERRER &_=RANDOM
AUTHDATA 變數可用於 Pingback (回傳) 和 Login (登入) 網址。它允許將授權回應中的任何欄位作為網址參數傳遞。例如:AUTHDATA(isSubscriber)
。也允許巢狀運算式,例如 AUTHDATA(other.isSubscriber)
。如果使用命名空間,則可以在欄位前加上命名空間,例如 AUTHDATA(anamespace.afield)
。
Access Content Markup (存取內容標記)
Access Content Markup (存取內容標記) 描述哪些區塊是可見或隱藏的。它由兩個 AMP 屬性組成:amp-access
和 amp-access-hide
,可以放置在任何 HTML 元素上。
amp-access
屬性提供運算式,根據 Authorization endpoint (授權端點) 傳回的授權回應,產生 true (真) 或 false (假)。結果值表示元素及其內容是否可見。
amp-access
值是以類似 SQL 的語言定義的布林運算式。語法定義在「附錄 A」中。其定義如下:
<div amp-access="expression">...</div>
屬性和值指的是 Authorization endpoint (授權端點) 傳回的授權回應的屬性和值。這提供了一個彈性的系統來支援不同的存取權情境。如果使用命名空間,只需在屬性名稱前加上命名空間,例如 anamespace.aproperty
。
amp-access-hide
屬性可用於在收到授權回應之前,先樂觀地隱藏元素,之後可能會顯示該元素。它提供「預設隱藏」的語意。Authorization (授權) 後續傳回的授權回應可能會撤銷此預設值,並使區塊可見。當省略 amp-access-hide
屬性時,區塊預設會顯示/包含。amp-access-hide
屬性只能與 amp-access
屬性一起使用。
<div amp-access="expression" amp-access-hide>...</div>
如果授權請求失敗,則不會評估 amp-access
運算式,區塊是否可見或隱藏取決於文件中最初提供的 amp-access-hide
屬性是否存在。
我們可以根據需要擴充 amp-access-*
屬性的集合,以支援不同的混淆處理和呈現需求。
如果授權請求失敗,且文件中未指定「authorizationFallbackResponse (授權備用回應)」回應,則不會評估 amp-access
運算式,區塊是否可見或隱藏取決於文件中最初提供的 amp-access-hide
屬性是否存在。
以下範例根據訂閱狀態顯示登入連結或完整內容:
<header> Title of the document </header> <div> First snippet in the document. </div> <div amp-access="NOT subscriber" amp-access-hide> <a on="tap:amp-access.login">Become a subscriber now!</a> </div> <div amp-access="subscriber"> Full content. </div>
在此範例中:
- subscriber (訂閱者) 是 Authorization endpoint (授權端點) 傳回的授權回應中的布林欄位。此區塊預設為隱藏,這是選用的。
- 此範例選擇樂觀地顯示完整內容。
以下是另一個範例,向讀者顯示關於計量狀態的免責聲明:
<section amp-access="views <= maxViews"> <template amp-access-template type="amp-mustache"> You are reading article {{views}} out of {{maxViews}}. </template> </section>
以下範例向高級訂閱者顯示額外內容:
<section amp-access="subscriptonType = 'premium'"> Shhh… No one but you can read this content. </section>
Authorization Endpoint (授權端點)
Authorization (授權) 是透過「AMP Access Configuration (AMP 存取權設定)」章節中的 authorization (授權)
屬性設定的。它是一個具備憑證的 CORS GET 端點。如需瞭解如何保護此請求的安全,請參閱「CORS Origin Security (CORS 來源安全)」。
Authorization (授權) 可以採用「Access URL Variables (存取網址變數)」章節中定義的任何參數。例如,它可以傳遞 AMP Reader ID (AMP 讀者 ID) 和文件網址。除了網址參數外,發布商也可以使用透過 HTTP 協定自然傳遞的任何資訊,例如讀者的 IP 位址。必須包含 READER_ID
。
此端點會產生授權回應,可用於內容標記運算式中,以顯示/隱藏內容的不同部分。
請求格式如下:
https://publisher.com/amp-access.json? rid=READER_ID &url=SOURCE_URL
回應是一個自由格式的 JSON 物件:它可以包含任何屬性和值,但有一些限制。限制如下:
- 屬性名稱必須符合
amp-access
運算式語法 (請參閱「附錄 A」) 定義的限制。這主要表示屬性名稱不能包含空格、破折號和其他不符合「amp-access」規格的字元。 - 屬性值只能是下列類型之一:字串、數字、布林值。
- 值也可以巢狀結構形式存在,作為具有相同類型值 (字串、數字、布林值) 的物件。
- 序列化授權回應的總大小不得超過 500 位元組。
- 請確保回應不包含任何個人身分識別資訊 (PII) 或個人資料。
以下是 Authorization endpoint (授權端點) 可以傳回的屬性的一些可能想法:
- 計量資訊:最大允許瀏覽次數和目前瀏覽次數。
- 讀者是否已登入或為訂閱者。
- 更詳細的訂閱類型:基本、高級
- 地理位置:國家/地區、區域、自訂發布區域
以下範例顯示讀者不是訂閱者且每月計量 10 篇文章,且已瀏覽 6 篇文章時的回應:
{ "maxViews": 10, "currentViews": 6, "subscriber": false }
以下範例顯示讀者已登入且具有高級訂閱類型時的回應:
{ "loggedIn": true, "subscriptionType": "premium" }
此 RPC 可以在預先呈現階段呼叫,因此不應用於計量倒數,因為讀者可能永遠不會實際看到文件。
另一個重要的考量是,在某些情況下,AMP 執行階段可能需要針對每個文件曝光呼叫 Authorization endpoint (授權端點) 多次。當 AMP Runtime (AMP 執行階段) 認為讀者的存取參數已大幅變更時,可能會發生這種情況,例如在成功完成登入流程後。
授權回應可能會被 AMP Runtime (AMP 執行階段) 和擴充功能用於三個不同的目的:
- 評估
amp-access
運算式時。 - 評估
<template>
範本 (例如amp-mustache
) 時。 - 使用
AUTHDATA(欄位)
將其他變數提供給回傳和登入網址時。
Authorization endpoint (授權端點) 由 AMP Runtime (AMP 執行階段) 作為具備憑證的 CORS 端點呼叫。因此,它必須實作 CORS 協定。它應使用 CORS Origin (CORS 來源) 和來源來源來限制對此服務的存取,如「CORS Origin Security (CORS 來源安全)」中所述。此端點可能會使用發布商 Cookie 來滿足其需求。例如,它可以建立 Reader ID (讀者 ID) 和發布商自己的使用者身分之間的繫結。AMP 本身不需要知道 (而且最好不知道) 這一點。如需更多詳細資訊,請參閱「AMP Reader ID (AMP 讀者 ID)」和「AMP Access and Cookies (AMP 存取權與 Cookie)」文件。
當呼叫 Authorization endpoint (授權端點) 時,AMP Runtime (AMP 執行階段) (或更確切地說是瀏覽器) 會觀察快取回應標頭。因此,可以重複使用快取的回應。這可能是理想的,也可能不是理想的。如果不是理想的,發布商可以使用適當的快取控制標頭和/或端點網址的 RANDOM
變數替換。
如果授權請求失敗,且設定中指定了「authorizationFallbackResponse (授權備用回應)」,則 AMP Runtime (AMP 執行階段) 將會退回到「authorizationFallbackResponse (授權備用回應)」。在這種情況下,授權流程將會正常進行,並使用「authorizationFallbackResponse (授權備用回應)」屬性的值來取代授權回應。如果未指定「authorizationFallbackResponse (授權備用回應)」,則授權流程將會失敗,在這種情況下,amp-access
運算式將不會被評估,區塊是否可見或隱藏將取決於文件中最初提供的 amp-access-hide
屬性是否存在。
授權請求會在 3 秒後自動逾時,並假定為失敗。
AMP Runtime (AMP 執行階段) 在授權流程期間使用下列 CSS 類別:
- 當授權流程開始時,
amp-access-loading
CSS 類別會設定在文件根目錄上,並在授權流程完成或失敗時移除。 - 當授權流程失敗時,
amp-access-error
CSS 類別會設定在文件根目錄上。
在 server (伺服器) 選項中,對 Authorization endpoint (授權端點) 的呼叫是由 Google AMP Cache (Google AMP 快取) 作為簡單的 HTTPS 端點進行的。這表示在這種情況下,無法傳遞發布商的 Cookie。
Pingback Endpoint (回傳端點)
Pingback (回傳) 是透過「AMP Access Configuration (AMP 存取權設定)」章節中的 pingback (回傳)
屬性設定的。它是一個具備憑證的 CORS POST 端點。如需瞭解如何保護此請求的安全,請參閱「CORS Origin Security (CORS 來源安全)」。
Pingback URL (回傳網址) 是選用的。可以使用 "noPingback": true
來停用。
Pingback URL (回傳網址) 可以採用「Access URL Variables (存取網址變數)」章節中定義的任何參數。例如,它可以傳遞 AMP Reader ID (AMP 讀者 ID) 和文件網址。必須包含 READER_ID
。
Pingback (回傳) 不會產生回應 - AMP 執行階段會忽略任何回應。
當讀者開始瀏覽文件,以及在讀者成功完成登入流程後,會呼叫 Pingback endpoint (回傳端點)。
發布商可以選擇使用回傳:
- 倒數頁面的免費瀏覽次數
- 將 AMP Reader ID (AMP 讀者 ID) 對應到發布商的身分,因為作為具備憑證的 CORS 端點,Pingback (回傳) 可能包含發布商 Cookie
請求格式如下:
https://publisher.com/amp-pingback? rid=READER_ID &url=SOURCE_URL
登入頁面
Login Page (登入頁面) 的網址是透過「AMP Access Configuration (AMP 存取權設定)」章節中的 login (登入)
屬性設定的。
設定可以指定單一登入網址,或依登入類型索引的登入網址地圖。單一登入網址的範例如下:
{ "login": "https://publisher.com/amp-login.html?rid={READER_ID}" }
多個登入網址的範例如下:
{ "login": { "signin": "https://publisher.com/signin.html?rid={READER_ID}", "signup": "https://publisher.com/signup.html?rid={READER_ID}" } }
網址可以採用「Access URL Variables (存取網址變數)」章節中定義的任何參數。例如,它可以傳遞 AMP Reader ID (AMP 讀者 ID) 和文件網址。RETURN_URL
查詢替換可用於指定返回網址的查詢參數,例如 ?ret=RETURN_URL
。返回網址是必要的,如果未指定 RETURN_URL
替換,則會自動注入,預設查詢參數名稱為「return」。
Login Page (登入頁面) 只是一個普通的網頁,沒有特殊的限制,除了它應該能作為 瀏覽器對話方塊 良好運作。如需更多詳細資訊,請參閱「Login Flow (登入流程)」章節。
請求格式如下:
https://publisher.com/amp-login.html? rid=READER_ID &url=SOURCE_URL &return=RETURN_URL
請注意,如果未指定 RETURN_URL
替換,則「return (返回)」網址參數會由 AMP Runtime (AMP 執行階段) 自動新增。Login Page (登入頁面) 完成其工作後,必須重新導向回指定的「Return URL (返回網址)」,格式如下:
RETURN_URL#success=true|false
請注意 URL 雜湊參數「success (成功)」的使用。值為「true (真)」或「false (假)」,取決於登入是否成功或放棄。理想情況下,Login Page (登入頁面) 在可能的情況下,會在成功或失敗的情況下都發送訊號。
如果傳回 success=true
訊號,AMP Runtime (AMP 執行階段) 將會重複呼叫 Authorization (授權) 和 Pingback (回傳) 端點,以更新文件的狀態並使用新的存取權設定檔報告「瀏覽」。
登入連結
發布商可以選擇將 Login Link (登入連結) 放置在文件中內容的任何位置。
一個或多個登入網址是透過「AMP Access Configuration (AMP 存取權設定)」章節中的「login (登入)」屬性設定的。
Login Link (登入連結) 可以在任何允許「on (開啟)」屬性的 HTML 元素上宣告。通常這會是錨點或按鈕元素。當設定單一登入網址時,格式如下:
<a on="tap:amp-access.login">Login or subscribe</a>
當設定多個登入網址時,格式為 tap:amp-access.login-{type}
。範例:
<a on="tap:amp-access.login-signup">Subscribe</a>
當使用命名空間時,格式為 tap:amp-access.login-{namespace}
或 tap:amp-access.login-{namespace}-{type}
。
AMP 不區分登入和訂閱。發布商可以使用多個登入網址/連結或在發布商端設定此區別。
與 amp-analytics 的整合
與 amp-analytics 的整合記錄在 amp-access-analytics.md 中。
CORS Origin Security (CORS 來源安全)
Authorization (授權) 和 Pingback (回傳) 端點是 CORS 端點,它們必須實作 AMP CORS Security Spec (AMP CORS 安全規格) 中描述的安全協定。
計量
Metering (計量) 系統是指在某段期間內,讀者可以免費瀏覽數次優質內容。一旦達到配額,就會啟動付費牆,讀者會看到部分內容,並顯示追加銷售訊息和註冊/登入連結。例如,計量可以定義為「讀者每月可以免費閱讀 10 篇文章」。
AMP Access (AMP 存取權) 提供下列設施來實作計量存取:
- READER_ID 應用於儲存計量資訊。由於發布商不能總是依賴在第三方環境中設定 Cookie,因此此資料應儲存在伺服器端。
- 「閱讀計數」只能在 Pingback endpoint (回傳端點) 中更新。
- 只有唯一的文件才能計入配額。也就是說,重新整理同一份文件十次只算一次瀏覽。為此,Authorization (授權) 和 Pingback (回傳) 端點可以注入
SOURCE_URL
或類似的網址變數。請參閱「Access URL Variables (存取網址變數)」。
First-Click-Free (首次點擊免費)
Google 的 First-click-free (首次點擊免費,或 FCF) 政策在 此處 有說明,最新的更新在 此處 有更詳細的說明。
若要實作 FCF,發布商必須 (1) 能夠判斷每次瀏覽的參照服務,以及 (2) 能夠計算每位讀者每天的瀏覽次數。
AMP Access (AMP 存取權) 規格涵蓋了這兩個步驟。參照位址可以使用「Access URL Variables (存取網址變數)」中描述的 DOCUMENT_REFERRER
網址替換注入到 Authorization (授權) 和 Pingback (回傳) 網址中。瀏覽次數計數可以使用伺服器端的 Pingback endpoint (回傳端點) 完成。這與「Metering (計量)」中描述的計量實作非常相似。
登入流程
AMP 會以第一方視窗、彈出式視窗或分頁的形式啟動登入對話方塊。在可能的情況下,AMP 檢視器應嘗試在瀏覽器環境中啟動登入對話方塊,以便它可以利用頂層瀏覽器 API。
當讀者啟用 Login Link (登入連結) 時,AMP Runtime (AMP 執行階段) 會啟動登入流程,描述性地來說,它遵循以下步驟:
- AMP Runtime (AMP 執行階段) 或檢視器會針對指定的登入網址開啟登入對話方塊 (第一方視窗)。網址包含額外的「Return URL (返回網址)」網址查詢參數 (
&return=RETURN_URL
)。許多其他參數也可以擴充到網址中,例如 Reader ID (讀者 ID)。如需更多詳細資訊,請參閱「Login Page (登入頁面)」章節。 - 發布商顯示自由格式的登入頁面。
- 讀者依照登入步驟操作,例如輸入使用者名稱/密碼或使用社群登入。
- 讀者提交登入。發布商完成驗證、設定 Cookie,最後將讀者重新導向到先前請求的「Return URL (返回網址)」。重新導向包含 URL 雜湊參數
success
,其值可以是true
或false
。 - 登入對話方塊遵循重新導向到「Return URL (返回網址)」。
- AMP Runtime (AMP 執行階段) 重新授權文件。
只有步驟 2-5 需要由發布商處理:發布商僅提供自己的 Login Page (登入頁面),並確保在完成後正確重新導向。登入頁面沒有其他特殊限制,除了它應該能作為對話方塊良好運作。
與往常一樣,Reader ID (讀者 ID) 應包含在對 Login Page (登入頁面) 的呼叫中,發布商可以使用它進行身分對應。作為第一方視窗,發布商也將收到他們的 Cookie,並且能夠設定它們。如果發現讀者已在發布商端登入,建議發布商立即重新導向回「Return URL (返回網址)」,並附帶 success=true
回應。
AMP 詞彙表
- AMP Document (AMP 文件) - 遵循 AMP 格式並由 AMP Validator (AMP 驗證器) 驗證的 HTML 文件。AMP 文件可由 Google AMP Cache (Google AMP 快取) 快取。
- AMP 驗證器 (AMP Validator) - 此電腦程式會對 HTML 文件執行靜態分析,並根據文件是否符合 AMP 格式傳回成功或失敗。
- AMP 執行階段環境 (AMP Runtime) - 執行 AMP 文件的 JavaScript 執行階段環境。
- Google AMP 快取 (Google AMP Cache) - AMP 文件的代理快取。
- AMP 檢視器 (AMP Viewer) - 顯示/嵌入 AMP 文件的 Web 或原生應用程式。
- Publisher.com - AMP 發布者的網站。
- CORS 端點 (CORS endpoint) - 跨來源 HTTPS 端點。如需更多資訊,請參閱 https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS。如需瞭解如何保護此類請求,請參閱CORS 來源安全性。
- 讀者 (Reader) - 實際檢視 AMP 文件的人。
- AMP 預先渲染 (AMP Prerendering) - AMP 檢視器可能會利用預先渲染技術,在文件顯示之前先渲染隱藏的文件。這可以顯著提升效能。但務必考量到文件預先渲染並不構成一次檢視,因為讀者可能永遠不會實際看到該文件。
修訂
- 2016-Sep-02:「noPingback」組態屬性和選用性回傳 (pingback)。
- 2016-Mar-03:登入後重新傳送回傳 (v0.5)。
- 2016-Feb-19:修正範例以移除 URL 變數替換中的
{}
。 - 2016-Feb-15:組態和授權端點現在允許「authorizationFallbackResponse」屬性,可用於授權失敗時。
- 2016-Feb-11:授權端點中的授權請求逾時。
- 2016-Feb-11:現在允許巢狀欄位參照,例如
object.field
。 - 2016-Feb-09:首次點擊免費和計量章節。
- 2016-Feb-03:將「來源來源 (source origin)」安全性規範新增至CORS 來源安全性。
- 2016-Feb-01:可以使用 RETURN_URL URL 替換來自訂登入頁面的「return」查詢參數。
附錄 A:「amp-access」運算式語法
最新的 BNF 文法可在 access-expr-impl.jison 檔案中取得。
此文法的重點摘錄如下
search_condition: search_condition OR search_condition | search_condition AND search_condition | NOT search_condition | '(' search_condition ')' | predicate predicate: comparison_predicate | truthy_predicate comparison_predicate: scalar_exp '=' scalar_exp | scalar_exp '!=' scalar_exp | scalar_exp '<' scalar_exp | scalar_exp '<=' scalar_exp | scalar_exp '>' scalar_exp | scalar_exp '>=' scalar_exp truthy_predicate: scalar_exp scalar_exp: literal | field_ref field_ref: field_ref '.' field_name | field_name literal: STRING | NUMERIC | TRUE | FALSE | NULL
請注意,amp-access
表達式是由 AMP 執行階段環境和 Google AMP 快取評估。這並非發布者需要實作的規格的一部分。此處僅供參考。
詳細討論
本節將詳細說明 amp-access 規格背後的設計,並釐清設計選擇。即將推出。
驗證
請參閱 AMP 驗證器規格中的 amp-access 規則。
您已閱讀此文件十幾次,但它仍然沒有真正涵蓋您的所有問題?也許其他人也有同感:請在 Stack Overflow 上與他們聯繫。
前往 Stack Overflow 發現錯誤或缺少功能?AMP 專案非常鼓勵您的參與和貢獻!我們希望您能成為我們開放原始碼社群的長期參與者,但我們也歡迎針對您特別關注的問題提供一次性貢獻。
前往 GitHub