iOS/tvOS SDK API參考 iostvos-sdk-api-reference

NOTE
此頁面上的內容僅供參考。 使用此API需要Adobe的目前授權。 不允許未經授權的使用。

簡介 intro

本頁說明適用於Adobe Pass驗證的iOS/tvOS Native Client所公開的方法和回呼函式。 此處說明的方法和回呼函式定義於AccessEnabler.hEntitlementDelegate.h標頭檔案中;您可以在iOS AccessEnabler SDK的下列位置找到它們: [SDK directory]/AccessEnabler/headers/api/

相關檔案:

NOTE
Adobe鼓勵您只使用Adobe Pass驗證​ 公用 API:
  • 公用API可用於所有支援的使用者端型別,並經過完整測試。 對於任何公用功能,我們確定每個使用者端型別都有相關方法的對應版本。
  • 公用API需要儘可能穩定,以支援回溯相容性,並確保合作夥伴整合不會中斷。 不過,對於非公開API,我們保留在未來任何時候變更其簽名的權利。 如果您遇到無法透過目前公用Adobe Pass驗證API呼叫組合支援的特定流程,最好的方法就是讓我們知道。 根據您的需求,我們可以修改公用API,並提供未來穩定的解決方案。

API參考 apis

init:softwareStatement initWithSoftwareStatement

檔案: AccessEnabler/headers/AccessEnabler.h

描述: ​將AccessEnabler物件具現化。 每個應用程式執行個體應該有一個AccessEnabler執行個體。

API呼叫: iOS AccessEnabler建構函式
- (id) init:
(NSString *)softwareStatement;

可用性: v3.0+

引數:

  • softwareStatement: ​識別Adobe系統中應用程式的字串。 瞭解如何取得軟體宣告。

回到頂端……

初始 — [已棄用] init

檔案: AccessEnabler/headers/AccessEnabler.h

描述: ​將AccessEnabler物件具現化。 每個應用程式執行個體應該有一個AccessEnabler執行個體。

API呼叫: iOS AccessEnabler建構函式
- (id) init;

可用性: v1.0+ 直到: v3.0

引數: ​無

回到頂端……

setoptions:options setOptions

檔案: AccessEnabler/headers/AccessEnabler.h

描述: ​設定全域SDK選項。 它接受NSDictionary做為引數。 字典中的值會連同SDK發出的每個網路呼叫一起傳遞至伺服器。

注意: ​這些值將會傳遞至伺服器,不受目前流量(驗證/授權)的影響。 如果您想要變更值,可以隨時呼叫此方法。

API呼叫: setOptions
- (void) setOptions:(NSDictionary *)options;

可用性: v2.3.0+

引數:

  • options:包含全域SDK選項的NSDictionary。 目前提供下列選項:

    • applicationProfile — 它可用來根據這個值設定伺服器組態。

    • visitorID -Experience Cloud識別碼服務。 此值稍後可用於進階分析報表。

    • handleSVC — 布林值,表示程式設計師是否會處理SFSafariViewControllers。 如需詳細資訊,請參閱iOS SDK 3.2+🔗上的SFSafariViewController支援。

      • 若設為​ false,,SDK會自動向一般使用者顯示SFSafariViewController。 SDK會進一步導覽至MVPD登入頁面URL。
      • 若設為​ true, SDK將​ NOT ​自動向一般使用者顯示SFSafariViewController。 SDK將進一步觸發​ navigate(toUrl:{url}, useSVC:YES)
  • device_info — 使用者端資訊,如傳遞使用者端資訊中所述。

回到頂端……

setRequestor:requestorIDsetRequestor:requestorID:serviceProviders: setReqV3

檔案: AccessEnabler/headers/AccessEnabler.h

描述: ​建立程式設計師的身分。 每個程式設計師在為Adobe Pass驗證系統註冊Adobe後都會獲得一個唯一的ID。 在處理SSO和遠端權杖時,驗證狀態會在應用程式於背景時變更,當應用程式進入前景時,可再次呼叫setRequestor以便與系統狀態同步(如果SSO已啟用,則會擷取遠端權杖,如果同時發生登出,則會刪除本機權杖)。

伺服器回應包含MVPD清單,以及附加至程式設計師身分的一些設定資訊。 伺服器回應由AccessEnabler程式碼在內部使用。 只有作業的狀態(即SUCCESS/FAIL)會透過setRequestorComplete:回呼顯示給您的應用程式。

如果未使用urls引數,則產生的網路呼叫會鎖定預設服務提供者URL:AdobeRELEASE/生產環境。

如果為urls引數提供了值,則產生的網路呼叫會鎖定urls引數中提供的所有URL。 所有設定請求都在不同的執行緒中同時觸發。 第一個回應者在編譯MVPD清單時優先。 對於清單中的每個MVPD,AccessEnabler會記住關聯服務提供者的URL。 所有後續的軟體權利檔案要求都會導向在設定階段與目標MVPD配對之服務提供者相關聯的URL。

API呼叫:要求者設定
- (void) setRequestor:(NSString *)requestorID

可用性: v3.0+

API呼叫:要求者設定
- (void) setRequestor:(NSString *)requestorID serviceProviders:(NSArray *)urls;

可用性: v3.0+

引數:

  • requestorID:與程式設計師相關聯的唯一識別碼。 首次向Adobe Pass驗證服務註冊時,請將Adobe指派的唯一ID傳遞至您的網站。
  • url:選用引數;預設會使用Adobe服務提供者(http://sp.auth.adobe.com/)。 此陣列可讓您為Adobe提供的驗證和授權服務指定端點(不同的執行個體可能會用於偵錯)。 您可以使用此專案來指定多個Adobe Pass驗證服務提供者執行個體。 這樣做時,MVPD清單會由來自所有服務提供者的端點組成。 每個MVPD都與最快的服務提供者相關聯;也就是先回應且支援該MVPD的提供者。
NOTE
如果未使用serviceProviders引數呼叫,程式庫將會從預設服務提供者(亦即,生產設定檔的https://sp.auth.adobe.com或暫存設定檔的https://sp.auth-staging.adobe.com)擷取組態。 如果提供serviceProviders引數,它必須是URL的陣列。組態資訊會從所有指定的端點擷取並合併。 如果不同的服務提供者回應中存在重複的資訊,衝突會以回應時間最快的伺服器來解決(也就是以回應時間最短的伺服器優先)。

已觸發​ 回呼: setRequestorComplete:

回到頂端……

setRequestor:setSignedRequestorId:setRequestor:setSignedRequestorId:serviceProviders: - [已棄用] setReq

檔案: AccessEnabler/headers/AccessEnabler.h

描述: ​建立程式設計師的身分。 每個程式設計師在為Adobe Pass驗證系統註冊Adobe後都會獲得一個唯一的ID。 處理SSO和遠端權杖時,驗證狀態會在應用程式於背景時變更,當應用程式進入前景時,可再次呼叫setRequestor以便與系統狀態同步(如果SSO已啟用,會擷取遠端權杖,如果同時發生登出,則會刪除本機權杖)。

伺服器回應包含MVPD清單,以及附加至程式設計師身分的一些設定資訊。 伺服器回應由AccessEnabler程式碼在內部使用。 只有作業的狀態(即SUCCESS/FAIL)會透過setRequestorComplete:回呼顯示給您的應用程式。

如果未使用urls引數,則產生的網路呼叫會鎖定預設服務提供者URL:AdobeRELEASE/生產環境。

如果為urls引數提供了值,則產生的網路呼叫會鎖定urls引數中提供的所有URL。 所有設定請求都在不同的執行緒中同時觸發。 第一個回應者在編譯MVPD清單時優先。 對於清單中的每個MVPD,AccessEnabler會記住關聯服務提供者的URL。 所有後續的軟體權利檔案要求都會導向在設定階段與目標MVPD配對之服務提供者相關聯的URL。

API呼叫:要求者設定
- (void) setRequestor:(NSString *)requestorID
signedRequestorID:(NSString *)signedRequestorID;

可用性: v1.0+ 直到: v3.0

API呼叫:要求者設定
- (void) setRequestor:(NSString *)requestorID
signedRequestorID:(NSString *)signedRequestorID
serviceProviders:(NSArray *)urls;

可用性: v1.0+ 直到: v3.0

引數:

  • requestorID:與程式設計師相關聯的唯一識別碼。 首次向Adobe Pass驗證服務註冊時,請將Adobe指派的唯一ID傳遞至您的網站。
  • signedRequestorID此引數存在於iOS AccessEnabler 1.2或更新版本中。 ​以您的私密金鑰數位簽署的請求者ID復本。
  • url:選用引數;預設會使用Adobe服務提供者(http://sp.auth.adobe.com/)。 此陣列可讓您為Adobe提供的驗證和授權服務指定端點(不同的執行個體可能會用於偵錯)。 您可以使用此專案來指定多個Adobe Pass驗證服務提供者執行個體。 這樣做時,MVPD清單會由來自所有服務提供者的端點組成。 每個MVPD都與最快的服務提供者相關聯;也就是先回應且支援該MVPD的提供者。

附註: ​如果未使用serviceProviders引數呼叫,程式庫將會從預設服務提供者(亦即,https://sp.auth.adobe.com用於生產設定檔,或https://sp.auth-staging.adobe.com用於暫存設定檔)擷取組態。 如果提供serviceProviders引數,它必須是URL的陣列。組態資訊會從所有指定的端點擷取並合併。 如果不同的服務提供者回應中存在重複的資訊,衝突會以回應時間最快的伺服器來解決(亦即,以回應時間最短的伺服器優先)。

已觸發​ 回呼: setRequestorComplete:

回到頂端……

setRequestor:setSignedRequestorId:secret:publicKeysetRequestor:setSignedRequestorId:serviceProviders:secret:publicKey - [已棄用] setReq_tvos

檔案: AccessEnabler/headers/AccessEnabler.h

描述: ​建立程式設計師的身分。 每個程式設計師在為Adobe Pass驗證系統註冊Adobe後都會獲得一個唯一的ID。 此設定只應在應用程式的生命週期中執行一次。

伺服器回應包含MVPD清單,以及附加至程式設計師身分的一些設定資訊。 伺服器回應由AccessEnabler程式碼在內部使用。 只有作業的狀態(即SUCCESS/FAIL)會透過setRequestorComplete:回呼顯示給您的應用程式。

如果未使用urls引數,則產生的網路呼叫會鎖定預設服務提供者URL:AdobeRELEASE/生產環境。

如果為urls引數提供了值,則產生的網路呼叫會鎖定urls引數中提供的所有URL。 所有設定請求都在不同的執行緒中同時觸發。 第一個回應者在編譯MVPD清單時優先。 對於清單中的每個MVPD,AccessEnabler會記住關聯服務提供者的URL。 所有後續的軟體權利檔案要求都會導向在設定階段與目標MVPD配對之服務提供者相關聯的URL。

API呼叫:要求者設定
code language-none
- (void) setRequestor:(NSString *)requestorID
    signedRequestorID:(NSString *)signedRequestorID
               secret:(NSString *)secret
            publicKey:(NSString *)publicKey;

可用性: v2.0+ 直到: v3.0

API呼叫:要求者設定
code language-none
- (void) setRequestor:(NSString *)requestorID
    signedRequestorID:(NSString *)signedRequestorID
     serviceProviders:(NSArray *)urls

secret:(NSString *)secret

publicKey:(NSString *)publicKey;

可用性: v2.0+ 直到: v3.0

引數:

  • requestorID:與程式設計師相關聯的唯一識別碼。 第一次使用時,請將Adobe指派的唯一ID傳遞至您的網站 已向Adobe Pass驗證服務註冊。
  • signedRequestorID此引數存在於iOS AccessEnabler中 版本1.2和更新版本。 ​以您的私密金鑰數位簽署的請求者ID復本。
  • url:選用引數;預設為Adobe服務提供者 已使用(http://sp.auth.adobe.com/)。 此陣列可讓您為Adobe提供的驗證和授權服務指定端點(不同的執行個體可能會用於偵錯)。 您可以使用此專案來指定多個Adobe Pass驗證服務提供者執行個體。 這樣做時,MVPD清單會由來自所有服務提供者的端點組成。 每個MVPD都與最快的服務提供者相關聯;也就是先回應且支援該MVPD的提供者。
  • secret和publicKey:用來簽署第二個熒幕呼叫的秘密和公開金鑰。 如需詳細資訊,請參閱無使用者端檔案

如果未使用serviceProviders引數呼叫,程式庫將會從預設服務提供者(亦即,生產設定檔的https://sp.auth.adobe.com或暫存設定檔的https://sp.auth-staging.adobe.com)擷取組態。 如果提供serviceProviders引數,它必須是URL的陣列。組態資訊會從所有指定的端點擷取並合併。 如果不同的服務提供者回應中存在重複的資訊,衝突會以回應時間最快的伺服器來解決(亦即,以回應時間最短的伺服器優先)。

已觸發​ 回呼: setRequestorComplete:

回到頂端……

setRequestorComplete: setReqComplete

檔案: AccessEnabler/headers/EntitlementDelegate.h

描述 ​由AccessEnabler觸發的回呼,通知您的應用程式設定階段已完成。 這是應用程式可以開始發出權益要求的訊號。 在設定階段完成之前,應用程式無法發出任何軟體權利檔案請求。

回呼:要求者設定完成
code language-none
- (void) setRequestorComplete:(int)status;

可用性: v1.0+

引數

  • 狀態:可以使用下列其中一個值:

    • ACCESS_ENABLER_STATUS_SUCCESS — 設定階段已順利完成
    • ACCESS_ENABLER_STATUS_ERROR — 設定階段失敗

觸發者:

setRequestor:setSignedRequestorId:, setRequestor:setSignedRequestorId:serviceProviders:

回到頂端……

checkAuthentication checkAuthN

檔案: AccessEnabler/headers/AccessEnabler.h

描述: ​檢查目前使用者的驗證狀態。
其做法是在本機中搜尋有效的驗證Token
Token儲存空間。 此方法不會執行任何網路呼叫,我們建議您在主要執行緒上呼叫它。
應用程式會用它來查詢使用者的驗證狀態,並且
相應地更新UI (即更新登入/登出UI)。 此
驗證狀態會透過以下方式傳達給應用程式:
setAuthenticationStatus:errorCode:回呼。

API呼叫:檢查驗證狀態
code language-none
- (void) checkAuthentication;

可用性: v1.0+

引數: ​無

已觸發​ 回呼:
setAuthenticationStatus:errorCode:

回到頂端……

getAuthenticationgetAuthentication:withData: getAuthN

檔案: AccessEnabler/headers/AccessEnabler.h

描述: ​啟動完整驗證工作流程。 首先檢查驗證狀態。 如果尚未驗證,則會啟動驗證流程狀態機器:

  • 如果上次驗證嘗試成功,則MVPD 已略過選取階段且 已觸發navigateToUrl:回呼。 此 應用程式會使用此回呼來例項化WebView控制項,該控制項會以MVPD的登入頁面顯示使用者。 [注意:截至Access Enabler 1.5,此功能無法使用,因為SDK]存在限制。
  • 如果上次驗證嘗試不成功,或使用者明確登出,則displayProviderDialog:回呼為 已觸發。 您的應用程式會使用此回呼來顯示MVPD選取UI。 此外,您的應用程式必須透過setSelectedProvider:方法通知AccessEnabler程式庫有關使用者的MVPD選取專案,以繼續驗證流程。

由於在MVPD登入頁面上驗證使用者的認證,您的應用程式必須監督使用者在MVPD登入頁面上驗證時發生的多個重新導向操作。 輸入正確的認證時,會將WebView控制項重新導向至由ADOBEPASS_REDIRECT_URL常數定義的自訂URL。 此URL不打算由WebView載入。 應用程式必須攔截此URL,並將此事件解譯為登入階段完成的訊號。 然後,它應該將控制項交給AccessEnabler,以完成驗證流程(透過呼叫handleExternalURL方法)。

最後,驗證狀態會透過setAuthenticationStatus:errorCode:回呼傳達給應用程式。

API呼叫:起始驗證流程
code language-none
- (void) getAuthentication;

可用性: v1.0+

API呼叫:起始驗證流程
code language-none
- (void) getAuthentication:(BOOL)forceAuthn:
                  withData:(NSDictionary* )data;

可用性: v1.9+

引數:

  • forceAuthn:指定是否應該啟動驗證流程的標幟,無論使用者是否已驗證。
  • 資料:包含要傳送至Pay-TV pass服務之索引鍵值組的字典。 Adobe可使用此資料來啟用未來的功能,而不需變更SDK。

已觸發​ 回呼: setAuthenticationStatus:errorCode:displayProviderDialog:sendTrackingData:forEventType:

回到頂端……

getAuthentication:filtergetAuthentication:withData:andFilter getAuthN_filter

檔案: AccessEnabler/headers/AccessEnabler.h

描述: ​啟動完整驗證工作流程。 首先檢查驗證狀態。 如果尚未驗證,則會啟動驗證流程狀態機器:

  • 如果目前的要求者至少有一個支援SSO的MVPD,將會呼叫presentTvProviderDialog()。 如果沒有任何MVPD支援SSO,則傳統驗證流程將開始,而篩選引數將被忽略。
  • 使用者完成之後,將會觸發Apple SSO流程dismissTvProviderDialog(),而且驗證程式將會完成。

最後,驗證狀態會透過setAuthenticationStatus:errorCode:回呼傳達給應用程式。

可用性: v2.4+

API呼叫:起始驗證流程
code language-none
- (void) getAuthentication:(NSDictionary *)filter;
API呼叫:起始驗證流程
code language-none
- (void) getAuthentication:(BOOL)forceAuthn:
                  withData:(NSDictionary* )data
                 andFilter:(NSDictionary *)filter;

引數:

  • forceAuthn:指定是否應該啟動驗證流程的標幟,無論使用者是否已驗證。

  • 資料:包含要傳送至Pay-TV pass服務之索引鍵值組的字典。 Adobe可使用此資料來啟用未來的功能,而不需變更SDK。

  • 篩選器:包含兩個MVPD ID清單的字典,應會顯示在Apple SSO對話方塊中。 任何不支援SSO的MVPD將被忽略,但順序將被遵守。 字典必須有兩個索引鍵:

    • TV_PROVIDERS:包含所有應該出現在選擇器中的MVPD的清單
    • FEATURED_TV_PROVIDERS:包含所有應在選擇器中標示為精選的MVPD的清單。 此清單中的MVPD也必須在TV_PROVIDERS清單中指定。

可用性: v2.0 - v2.3.1

API呼叫:起始驗證流程
code language-none
- (void) getAuthentication:(NSArray *)filter;
API呼叫:起始驗證流程
code language-none
- (void) getAuthentication:(BOOL)forceAuthn:
                  withData:(NSDictionary* )data
                 andFilter:(NSArray *)filter;

引數:

  • forceAuthn:指定是否應該啟動驗證流程的標幟,無論使用者是否已驗證。
  • 資料:包含要傳送至Pay-TV pass服務之索引鍵值組的字典。 Adobe可使用此資料來啟用未來的功能,而不需變更SDK。
  • 篩選器:應顯示在Apple SSO對話方塊中的MVPD ID清單。 任何不支援SSO的MVPD將被忽略,但順序將被遵守。

已觸發​ 回呼: setAuthenticationStatus:errorCode:, presentTvProviderDialog, dismissTvProviderDialog

回到頂端……

displayProviderDialog: dispProvDialog

檔案: AccessEnabler/headers/EntitlementDelegate.h

說明 ​由AccessEnabler觸發的回呼,通知應用程式必須具現化適當的UI元素,才能讓使用者選取想要的MVPD。 回呼會提供MVPD物件清單,內含其他資訊,可協助您正確建立選取專案UI面板(例如指向MVPD標誌的URL、好記的顯示名稱等)

使用者選取想要的MVPD後,上層應用程式必須呼叫setSelectedProvider:並傳遞與使用者選取專案相對應的MVPD識別碼,以恢複驗證流程。

中止驗證流程 — 這是使用者能夠按下[上一步]按鈕的時刻,這相當於中止驗證流程。 在該案例中,您的應用程式必須呼叫setSelectedProvider:方法,以傳遞null作為引數,讓AccessEnabler有機會重設其驗證狀態機器。

回呼:顯示MVPD選取專案UI
code language-none
- (void) displayProviderDialog:(NSArray *)mvpds;

可用性: v1.0+

引數

  • mvpds:包含MVPD相關資訊的MVPD物件清單,應用程式可使用此清單來建置MVPD選取專案UI元素。

觸發者: getAuthenticationgetAuthentication:withData:getAuthorization:getAuthorization:withData:

回到頂端……

setSelectedProvider: setSelProv

檔案: AccessEnabler/headers/AccessEnabler.h

描述: ​您的應用程式呼叫這個方法,以告知存取啟用程式使用者的MVPD選擇。 應用程式可以使用此方法來選取或變更用於驗證的服務提供者。

如果選取的MVPD是TempPass MVPD,它會自動透過該MVPD進行驗證,之後不需要呼叫getAuthentication()。

請注意,這不適用於促銷暫時傳遞,因為getAuthentication()方法有額外的引數。

將​ null ​作為引數傳遞時,Access Enabler會假設使用者已取消驗證流程(亦即按下[上一步]按鈕),並藉由重設驗證狀態機器及使用AccessEnabler.PROVIDER_NOT_SELECTED_ERROR錯誤碼呼叫setAuthenticationStatus:errorCode:回呼來回應。

API呼叫:設定目前選取的提供者
code language-none
- (void) setSelectedProvider:(NSString *)mvpdId;

可用性: v1.0+

引數: ​無

已觸發​ 回呼: setAuthenticationStatus:errorCode:sendTrackingData:forEventType:navigateToUrl:

回到頂端……

檔案: AccessEnabler/headers/EntitlementDelegate.h

描述: ​由AccessEnabler觸發的回呼,要求您的應用程式將UIWebView/WKWebView控制器具現化,並載入回呼​ url ​引數中提供的URL。 回呼會傳遞​ url ​引數,此引數代表驗證端點的URL或登出端點的URL。

當UIWebView/WKWebView 控制器執行數個重新導向時,您的應用程式必須監視控制器的活動,並偵測其載入ADOBEPASS_REDIRECT_URL 常數(即adobepass://ios.app)所定義之特定自訂URL的時間。 請注意,這個特定自訂URL實際上無效,控制器並非打算實際載入此URL。 應用程式必須將其解譯為驗證或登出流程已完成,且關閉控制器是安全的訊號。 當控制器載入這個特定的自訂URL時,您的應用程式必須關閉UIWebView/WKWebView並呼叫AccessEnabler的handleExternalURL:url API方法。

注意: ​請注意,若是驗證流程,這是使用者能夠按下[上一步]按鈕的點,這相當於中止驗證流程。 在這種情況下,您的應用程式必須呼叫setSelectedProvider:方法,傳遞​ nil ​做為引數,並讓AccessEnabler有機會重設其驗證狀態機器。

回呼:顯示MVPD登入頁面
code language-none
- (void) navigateToUrl:(NSString *)url;

可用性: v1.0+

引數

  • url:指向MVPD登入頁面的URL

觸發者: setSelectedProvider:

回到頂端……

檔案: AccessEnabler/headers/EntitlementDelegate.h

描述: ​若您的應用程式先前透過setOptions(["handleSVC":true"])呼叫啟用手動Safari檢視控制器(SVC)處理,且只有MVPD需要Safari檢視控制器(SVC)時,AccessEnabler會觸發回呼,而非navigateToUrl:回呼。 對於所有其他MVPD,將會呼叫navigateToUrl:回呼。 如需如何管理Safari檢視控制器(SVC)的詳細資訊,請參閱iOS SDK 3.2+🔗上的SFSafariViewController支援。

navigateToUrl:回呼類似,navigateToUrl:useSVC:由AccessEnabler觸發,要求您的應用程式將SFSafariViewController控制器具現化,並載入回呼的​ url ​引數中提供的URL。 回呼會傳遞代表驗證端點的URL或登出端點的URL的​ url ​引數,以及指定應用程式必須使用SFSafariViewController的​ useSVC ​引數。

SFSafariViewController控制器執行數次重新導向時,您的應用程式必須監視控制器的活動,並偵測其載入您application's custom scheme所定義的特定自訂URL的時間(例​ adbe.u-XFXJeTSDuJiIQs0HVRAg://adobe.com)。 請注意,這個特定自訂URL實際上無效,控制器並非打算實際載入此URL。 應用程式必須將其解譯為驗證或登出流程已完成,且關閉控制器是安全的訊號。 當控制器載入這個特定自訂URL時,您的應用程式必須關閉SFSafariViewController並呼叫AccessEnabler的handleExternalURL:url API方法。

注意: ​請注意,若是驗證流程,這是使用者能夠按下[上一步]按鈕的點,這相當於中止驗證流程。 在這種情況下,您的應用程式必須呼叫setSelectedProvider:方法,傳遞​ nil ​做為引數,並讓AccessEnabler有機會重設其驗證狀態機器。

回呼:在SFSafariViewController中顯示MVPD登入頁面
code language-none
@optional
​- (void) navigateToUrl:(NSString *)url useSVC:(BOOL)useSVC;

可用性: ​v 3.2+

引數

  • url: ​指向MVPD登入頁面的URL
  • useSVC: ​是否應在SFSafariViewController中載入URL。

觸發者: setOptions:,在setSelectedProvider:之前

回到頂端……

handleExternalURL:url handleExternalURL

檔案: AccessEnabler/headers/AccessEnabler.h

描述: ​您的應用程式呼叫此方法以完成驗證或登出流程。 應用程式偵測到UIWebView/WKWebView or SFSafariViewController控制器被重新導向至特定自訂URL時,應立即呼叫此方法。 如果您的應用程式需要使用SFSafariViewController 控制器,則特定自訂URL是由您的application's custom scheme所定義(例如adbe.u-XFXJeTSDuJiIQs0HVRAg://adobe.com),否則此特定自訂URL是由ADOBEPASS_REDIRECT_URL 常數(即adobepass://ios.app)所定義。

在驗證流程中,AccessEnabler會從後端伺服器擷取驗證權杖,並將其本機儲存在權杖儲存體中,以完成流程。 AccessEnabler會呼叫setAuthenticationStatus()回呼(狀態碼為1),通知應用程式驗證流程已完成,表示成功。 如果在執行這些步驟期間發生錯誤,setAuthenticationStatus()回呼會以狀態碼0觸發,表示驗證失敗以及對應的錯誤碼。

API呼叫:完成驗證或登出流程
code language-none
 (void) handleExternalURL:(NSString *)url;

可用性: v3.0+

引數:

  • url:從UIWebView/WKWebView or SFSafariViewController控制項截獲的URL為字串。

已觸發​ 回呼: setAuthenticationStatus:errorCode, sendTrackingData:forEventType:

回到頂端……

getAuthenticationToken - [已棄用] getAuthNToken

檔案: AccessEnabler/headers/AccessEnabler.h

描述: ​從後端伺服器要求驗證Token,以完成驗證流程。 應用程式只應呼叫這個方法,以回應以下事件:主控MVPD登入頁面的WebView控制項被重新導向至由ADOBEPASS_REDIRECT_URL常數定義的自訂URL。

API呼叫:擷取驗證Token
code language-none
- (void) getAuthenticationToken;

可用性: v1.0+ 直到: v3.0

引數: ​無

已觸發​ 回呼: setAuthenticationStatus:errorCode,sendTrackingData:forEventType:

回到頂端……

</br

setAuthenticationStatus:errorCode: setAuthNStatus

檔案: AccessEnabler/headers/EntitlementDelegate.h

描述 ​由AccessEnabler觸發的回呼,通知應用程式驗證流程的狀態。 在許多地方,由於使用者的互動或其他無法預料的情況(例如網路連線問題等),此流程可能會失敗。 此回呼會通知應用程式驗證流程的成功/失敗狀態,同時會在需要時提供有關失敗原因的其他資訊。

回呼:報告驗證流程的狀態
code language-none
- (void) setAuthenticationStatus:(int)status
                       errorCode:(NSString *)code;

可用性: v1.0+

引數

  • 狀態:可以使用下列其中一個值:

    • ACCESS_ENABLER_STATUS_SUCCESS — 驗證流程已成功完成
    • ACCESS_ENABLER_STATUS_ERROR — 驗證流程失敗
  • 代碼:失敗原因。 如果​ 狀態 ​為ACCESS_ENABLER_STATUS_SUCCESS,則​ 代碼 ​為空字串(亦即,由USER_AUTHENTICATED常數定義)。 如果失敗,此引數可以採用下列其中一個值:

    • USER_NOT_AUTHENTICATED_ERROR — 使用者未驗證。 回應checkAuthentication:方法呼叫(當本機權杖快取中沒有有效的驗證權杖時)。
    • PROVIDER_NOT_SELECTED_ERROR - AccessEnabler已重設 上層應用程式之後的驗證狀態機器 已將​ null ​傳遞給setSelectedProvider:以中止驗證流程。 使用者可能已取消驗證流程(亦即按下「上一步」按鈕)。
    • GENERIC_AUTHENTICATION_ERROR — 由於網路無法使用或使用者明確取消驗證流程等原因,驗證流程失敗。

觸發者: checkAuthenticationgetAuthenticationgetAuthentication:withData:checkAuthorization:checkAuthorization:withData:

回到頂端……

checkPreauthorizedResources: checkPreauth

檔案: AccessEnabler/headers/AccessEnabler.h

描述: ​應用程式使用此方法來判斷使用者是否已獲授權檢視特定的受保護資源。 此方法的主要目的是擷取用於裝飾UI 的資訊(例如,以鎖定與解鎖圖示表示存取狀態)。

API呼叫:設定目前選取的提供者
code language-none
- (void) checkPreauthorizedResources:(NSArray *)resources;

可用性: v1.3+

引數:

  • 資源: ​應檢查其授權的資源陣列。 清單中的每個元素應為代表資源ID的字串。 此 資源ID的限制與呼叫中的資源ID相同,也就是說,它應該是程式設計師與MVPD或媒體RSS片段之間建立的議定值。

已觸發​ 回呼: preauthorizedResources:

回到頂端……

checkPreauthorizedResources:cache: checkPreauthCache

檔案: AccessEnabler/headers/AccessEnabler.h

描述: ​應用程式使用此方法來判斷使用者是否已獲授權檢視特定的受保護資源。 此方法的主要用途是擷取用於裝飾UI的資訊(例如,使用鎖定和解鎖圖示指示存取狀態)。 cache ​引數控制內部快取是否用於解析資源。

API呼叫:設定目前選取的提供者
code language-none
- (void) checkPreauthorizedResources:(NSArray *)resources cache:(BOOL)cache;

可用性: v3.1+

引數:

  • 資源: ​應檢查其授權的資源陣列。 清單中的每個元素應為代表資源ID的字串。 資源ID受到與getAuthorization:呼叫中的資源ID相同的限制,也就是說,它應該是程式設計師與MVPD或媒體RSS片段之間建立的議定值。
  • 快取: ​布林值,指定是否使用內部快取來解析資源。 如果為false,則會略過快取,導致每次呼叫此API時都進行伺服器呼叫。

已觸發​ 回呼: preauthorizedResources:

回到頂端……

preauthorizedResources: preauthResources

檔案: AccessEnabler/headers/EntitlementDelegate.h

描述: ​由checkPreauthorizedResources:觸發的回呼。 提供使用者已獲授權可檢視的資源清單。

API呼叫:設定目前選取的提供者
code language-none
- (void) checkPreauthorizedResources:(NSArray *)resources;

可用性: v1.3+

引數:

  • resources:使用者已被授權檢視的資源陣列。

觸發者: checkPreauthorizedResources:

回到頂端……

checkAuthorization:checkAuthorization:withData: checkAuthZ

檔案: AccessEnabler/headers/AccessEnabler.h

描述: ​應用程式使用此方法來檢查授權狀態。 首先檢查驗證狀態。 如果未驗證,則會觸發tokenRequestFailed:errorCode:errorDescription:回呼,而方法會結束。 如果使用者已通過驗證,它也會觸發授權流程。 檢視getAuthorization:方法的詳細資料。

API呼叫:檢查授權狀態
code language-none
- (void) checkAuthorization:(NSString *)resource;

可用性: v1.0+

API呼叫:檢查授權狀態
code language-none
- (void) checkAuthorization:(NSString *)resource:
                   withData:(NSDictionary *)data;

可用性: v1.9+

引數:

  • resource:使用者要求授權的資源識別碼。
  • 資料:包含要傳送至Pay-TV pass服務之索引鍵值組的字典。 Adobe可使用此資料來啟用未來的功能,而不需變更SDK。

已觸發​ 回呼:

tokenRequestFailed:errorCode:errorDescription:setToken:forResource:sendTrackingData:forEventType:setAuthenticationStatus:errorCode:

回到頂端……

getAuthorization:getAuthorization:withData: getAuthZ

檔案: AccessEnabler/headers/AccessEnabler.h

描述: ​應用程式使用此方法來起始授權流程。 如果使用者尚未驗證,它也會起始驗證流程。 如果使用者通過驗證,AccessEnabler會繼續發出授權權杖(如果本機權杖快取中不存在有效的授權權杖)和短期媒體權杖的請求。 取得簡短媒體權杖後,授權流程即視為完成。 會觸發setToken:forResource:回呼,並將短媒體權杖作為引數傳遞至應用程式。 如果授權因任何原因而失敗,則會觸發tokenRequestFailed:forEventType:回呼,並提供錯誤碼/詳細資料。

API呼叫:起始授權流程
code language-none
- (void) getAuthorization:(NSString *)resource;

可用性: v1.0+

API呼叫:起始授權流程
code language-none
- (void) getAuthorization:(NSString *)resource:
                 withData:(NSDictionary *)data;

可用性: v1.9+

引數:

  • resource:使用者要求授權的資源識別碼。
  • 資料:包含要傳送至Pay-TV pass服務之索引鍵值組的字典。 Adobe可使用此資料來啟用未來的功能,而不需變更SDK。

已觸發​ 回呼: tokenRequestFailed:errorCode:errorDescription:, setToken:forResource:,sendTrackingData:forEventType:

觸發的其他回呼:
此方法也可以觸發下列回呼(如果也啟動驗證流程): setAuthenticationStatus:errorCode:displayProviderDialog:

NOTE
請儘可能使用checkAuthorization: / checkAuthorization:withData:,而非getAuthorization: / getAuthorization:withData:getAuthorization: / getAuthorization:withData:方法將啟動完整的驗證流程(如果使用者未驗證),這可能會導致程式設計師端的複雜實作。

回到頂端……

setToken:forResource: setToken

檔案: AccessEnabler/headers/EntitlementDelegate.h

描述 ​由AccessEnabler觸發的回呼,通知您的應用程式授權流程已順利完成。 短期媒體代號也會作為引數傳遞。

回呼:授權流程已成功完成
code language-none
- (void) setToken:(NSString *)token
      forResource:(NSString *)resource;

可用性: v1.0+

引數

  • 權杖:短期媒體權杖
  • resource:已取得授權的資源

觸發者: checkAuthorization:checkAuthorization:withData:getAuthorization:getAuthorization:withData:

回到頂端……

tokenRequestFailed:errorCode:errorDescription: tokenReqFailed

檔案: AccessEnabler/headers/EntitlementDelegate.h

描述 ​由AccessEnabler觸發的回呼,通知上層應用程式授權流程失敗。

回呼:授權流程失敗
code language-none
- (void) tokenRequestFailed:(NSString *)resource
                  errorCode:(NSString *)code
           errorDescription:(NSString *)description;

可用性: v1.0+

引數

  • resource:已取得授權的資源。
  • 代碼:與失敗案例關聯的錯誤碼。 可能的值:
    • USER_NOT_AUTHORIZED_ERROR — 使用者無法授權
      指定資源的
  • description:有關失敗情況的其他詳細資料。 如果此描述性字串因任何原因而無法使用,Adobe Pass驗證會傳送空白字串​ (")
    MVPD可使用此字串來傳遞自訂錯誤訊息或銷售相關訊息。 例如,如果拒絕訂閱者的資源授權,MVPD會傳送訊息,例如:「您目前沒有封裝中此通道的存取權。 若要升級您的封裝,請按一下​ 這裡。」 此訊息會由Adobe Pass驗證透過此回呼傳送給程式設計師,程式設計師可以選擇顯示或忽略此訊息。 Adobe Pass驗證也可以使用此引數來提供可能導致錯誤的狀況通知。 例如,「與提供者的授權服務通訊時發生網路錯誤」。

觸發者: checkAuthorization:checkAuthorization:withData:getAuthorization:getAuthorization:withData:

回到頂端……

登出 logout

檔案: AccessEnabler/headers/AccessEnabler.h

描述: ​您的應用程式呼叫此方法以啟動登出流程。 登出是一系列HTTP重新導向作業的結果,因為使用者需要同時從Adobe Pass驗證伺服器和MVPD伺服器登出。 因為此流程無法以AccessEnabler程式庫發出的簡單HTTP要求完成,所以必須將UIWebView/WKWebView or SFSafariViewController控制器具現化,才能遵循HTTP重新導向作業。

登出流程與驗證流程不同,因為使用者不需要以任何方式與UIWebView/WKWebView or SFSafariViewController控制器互動。 因此,Adobe建議您在登出過程中隱藏控制項。

採用類似於驗證流程的模式。 iOS AccessEnabler觸發navigateToUrl:回呼或navigateToUrl:useSVC:來建立UIWebView/WKWebView or SFSafariViewController控制器,並載入回呼的url引數中提供的URL。 這是後端伺服器上登出端點的URL。 對於tvOS AccessEnabler,不會呼叫navigateToUrl:回呼或navigateToUrl:useSVC:回呼。

執行數個重新導向時,您的應用程式必須監視UIWebView/WKWebView or SFSafariViewController 控制器的活動,並偵測載入特定自訂URL的時間。 請注意,這個特定自訂URL實際上無效,控制器並非打算實際載入此URL。 應用程式必須將其解譯為登出流程已完成,且關閉控制器是安全的訊號。 當控制器載入這個特定的自訂URL時,您的應用程式必須關閉控制器並呼叫AccessEnabler的handleExternalURL:url API方法。 如果您的應用程式需要使用SFSafariViewController 控制器,則特定自訂URL是由您的application's custom scheme所定義(例如adbe.u-XFXJeTSDuJiIQs0HVRAg://adobe.com),否則此特定自訂URL是由ADOBEPASS_REDIRECT_URL 常數(即adobepass://ios.app)所定義。

最後,AccessEnabler會以狀態碼0呼叫setAuthenticationStatus()回呼,表示登出流程成功。

注意: ​如果使用者使用Apple SSO登入,將會觸發VSA203狀態。 如果是這種情況,應指示使用者也從系統設定登出。 若未這麼做,應用程式重新啟動時,將導致重新驗證。

API呼叫:起始登出流程
code language-none
- (void) logout;

可用性: v1.0+

引數: ​無

已觸發​ 回呼: navigateToUrl:setAuthenticationStatus:errorCode:

回到頂端……

getselectedprovider getSelProv

檔案: AccessEnabler/headers/AccessEnabler.h

描述: ​使用此方法來判斷目前選取的提供者。

API呼叫:決定目前選取的MVPD
code language-none
- (void) getSelectedProvider;

可用性: v1.0+

引數: ​無

已觸發​ 回呼: selectedProvider:

回到頂端……

selectedprovider selProv

檔案: AccessEnabler/headers/EntitlementDelegate.h

描述 ​由AccessEnabler觸發的回呼,將目前所選MVPD的相關資訊傳送給應用程式。

回呼:目前所選MVPD的相關資訊
code language-none
- (void) selectedProvider:(MVPD *)mvpd;

可用性: v1.0+

引數

  • mvpd:包含目前所選MVPD相關資訊的物件

觸發者: getSelectedProvider

回到頂端……

getMetadata: getMeta

檔案: AccessEnabler/headers/AccessEnabler.h

描述: ​使用此方法來擷取AccessEnabler程式庫公開為中繼資料的資訊。 應用程式可提供字典式​ 索引鍵 ​輸入引數,以存取此資料。

程式設計師可以使用兩種中繼資料型別:

  • 靜態中繼資料(驗證權杖TTL、授權權杖TTL和裝置ID)
  • 使用者中繼資料(使用者特定資訊,例如使用者ID、郵遞區號;可在驗證和授權流程中從MVPD傳遞至使用者裝置)
API呼叫:查詢AccessEnabler的中繼資料
code language-none
- (void) getMetadata:(NSDictionary *)keyDictionary;

可用性: v1.0+

引數:

  • keyDictionary:字典資料結構,包含下列專案
    格式:

    • 如果金鑰為METADATA_OPCODE_KEY且值為METADATA_AUTHENTICATION,則會進行查詢以取得驗證權杖到期時間。

    • 如果索引鍵是METADATA_OPCODE_KEY且值是METADATA_AUTHORIZATION
      金鑰為METADATA_RESOURCE_ID_KEY且值為特定資源ID,則進行查詢以取得與指定資源關聯的授權權杖的到期時間。

    • 如果索引鍵為METADATA_OPCODE_KEY且值為METADATA_DEVICE_ID,則會進行查詢以取得目前的裝置識別碼。 請注意,此功能預設為停用,程式設計師應聯絡Adobe以取得有關啟用和費用的資訊。

    • 如果索引鍵是METADATA_OPCODE_KEY且值是METADATA_USER_META ​索引鍵是METADATA_USER_META_KEY且值是中繼資料的名稱,則會針對使用者中繼資料進行查詢。 可用的使用者中繼資料型別清單:

      • zip — 郵遞區號清單
      • householdID — 家庭識別碼。 在MVPD不支援附屬帳戶的情況下,這將與userID相同。
      • maxRating — 使用者最大家長分級的集合
      • userID — 使用者識別碼。 如果MVPD支援附屬帳戶,且使用者不是主帳戶,則userID將不同於householdID.
      • channelID — 使用者有權檢視的管道清單。
    note note
    NOTE
    程式設計師實際可用的使用者中繼資料取決於MVPD提供的內容。 此清單將隨著新的中繼資料可用並新增到Adobe Pass驗證系統中而展開。

已觸發​ 回呼: setMetadataStatus:encrypted:forKey:andArguments:

更多資訊: 使用者中繼資料

回到頂端……

presentTVProviderDialog presentTvDialog

檔案: AccessEnabler/headers/EntitlementDelegate.h

如果目前的要求者支援至少一個支援SSO的MVPD,在呼叫getAuthentication()之後,AccessEnabler會觸發​ 描述 ​回呼。

回呼:SSO流程的結果
code language-none
- (void) presentTvProviderDialog: (UIViewController *) viewController;

可用性: v2.0+

引數

  • viewController:代表Apple SSO對話方塊。 此viewController必須顯示在畫面上。

觸發者: getAuthentication

更多資訊: iOS/tvOS單一登入

回到頂端……

dissisesTVProviderDialog dismissTvDialog

檔案: AccessEnabler/headers/EntitlementDelegate.h

說明 ​使用者關閉Apple SSO對話方塊後,AccessEnabler所觸發的回呼。

回呼:SSO流程的結果
code language-none
- (void) dismissTvProviderDialog: (UIViewController *) viewController;

可用性: v2.0+

引數

  • viewController:代表Apple SSO對話方塊。 此viewController需要從畫面中移除。

觸發者: ​使用者動作

更多資訊: iOS/tvOS單一登入

回到頂端……

setMetadataStatus:encrypted:forKey:andArguments: setMetaStatus

檔案: AccessEnabler/headers/EntitlementDelegate.h

由AccessEnabler觸發的​ 描述 ​回呼,傳遞透過getMetadata:呼叫要求的中繼資料。

回撥:中繼資料擷取請求的結果
code language-none
- (void) setMetadataStatus:(id)metadata
                 encrypted:(bool)encrypted
                    forKey:(int)key
              andArguments:(NSDictionary *)arguments;

可用性: v1.0+

引數

  • 中繼資料:要求的中繼資料。 在靜態中繼資料(驗證TTL、授權TTL、裝置ID)的情況下,此值是NSString。 要求使用者特定的中繼資料時,這是一個複雜的物件。 此複雜物件通常是JSON裝載的Objective-C表示法(例如,'{"street": "Main Avenue", "buildings": ["150", "320"]}'在Objective-C中轉譯為NSDictionary("street" -> "Main Avenue", "buildings" -> NSArray("150", "320"))。 中繼資料JSON物件範例:
        {
            updated: 1334243471,
            encrypted: ["encryptedProp"],
            data: {
                zip: ["12345", "34567"],
                maxRating: {
                    "MPAA": "PG-13",
                    "VCHIP": "TV-Y",
                    "URL": "http://exam.pl/e/manage/ratings"
                },
                householdID: "3456",
                userID: "BgSdasfsdk23/dsaf3+saASesadgfsShggssd=",
                channelID: ["channel-1", "channel-2"]
            }
  • encrypted:布林值,指定擷取的中繼資料是否加密。 此引數僅對使用者中繼資料請求而言很重要,對始終未加密接收的靜態中繼資料(例如驗證TTL)而言沒有意義。 如果此引數設定為true,則程式設計師可以使用白名單私密金鑰(用來簽署setRequestor:setSignedRequestorId:setRequestor:setSignedRequestorId:serviceProviders: 呼叫中的要求者ID的相同私密金鑰)來執行RSA解密,以取得未加密的使用者中繼資料值。

  • key:用來制定中繼資料擷取要求的金鑰。

  • 引數:傳遞給getMetadata:呼叫的相同字典。 提供此屬性是為了讓應用程式可比對請求與回應。

觸發者: getMetadata:

更多資訊: 使用者中繼資料

回到頂端……

MVPD mvpd

檔案: AccessEnabler/headers/model/MVPD.h

描述 ​描述MVPD物件。 可用於取得MVPD屬性的相關資訊。

可用性: v1.0+ [boardingStatus屬性可從v2.2]取得

屬性

  • (NSString) ID - MVPD ID。

  • (NSString) displayName - MVPD名稱。 [這應該用於顯示在選擇器中]

  • (NSString) logoURL - MVPD標誌位址。

  • (布林值) enablePlatformServices — 如果為true,則MVPD支援Apple SSO之類的SSO服務。

  • (NSString) boardingStatus — 可以有3個值:

    • 無 — MVPD不支援Apple SSO。
    • 選取器 — MVPD會顯示在Apple選取器中,但驗證流程會由Adobe完成。
    • 支援 — Apple完全支援MVPD,且將使用Apple的SSO代號。

回到頂端……

追蹤事件 tracking

AccessEnabler會觸發其他回呼,而此回呼不一定與權益流程相關。 實作sendTrackingData()回呼函式是選擇性的,但可讓應用程式追蹤特定事件並編譯統計資料,例如成功/失敗的驗證/授權嘗試次數。

sendTrackingData sendTracking

檔案: AccessEnabler/headers/EntitlementDelegate.h

描述 AccessEnabler向應用程式發出各種事件(例如驗證/授權流程完成/失敗)訊號所觸發的回呼。 使用Adobe Pass Authentication 1.6時,sendTrackingData()會報告裝置型別、AccessEnabler使用者端型別和作業系統。 sendTrackingData()回呼保持回溯相容。

回撥:追蹤事件

(void) sendTrackingData:(NSArray *)data
             forEventType:(int)event;

可用性: v1.0+

注意: ​裝置型別和作業系統衍生自使用公用Java程式庫(http://java.net/projects/user-agent-utils)和使用者代理程式字串。 請注意,此資訊僅以粗略的方式提供,以將運作量度劃分為裝置類別,但該Adobe對於錯誤結果概不負責。 請據以使用新功能。

  • 裝置型別的可能值:

    • computer
    • tablet
    • mobile
    • gameconsole
    • unknown
  • AccessEnabler使用者端型別的可能值:

    • flash
    • html5
    • ios
    • android

引數

  • event:正在追蹤之事件的程式碼。 追蹤事件型別共有三種:

    • authorizationDetection: ​任何時候授權權杖要求傳回(事件為TRACKING_AUTHORIZATION
    • authenticationDetection: ​在任何驗證檢查發生時(事件為TRACKING_AUTHENTICATION
    • mvpdSelection: (當使用者在MVPD選擇表單中選取MVPD時) (事件為TRACKING_GET_SELECTED_PROVIDER
  • 資料:與報告事件相關的其他資料。 此資料會以值清單的形式呈現。

觸發者: checkAuthenticationgetAuthenticationgetAuthentication:withData:checkAuthorization:checkAuthorization:withData:getAuthorization:getAuthorization:withData:setSelectedProvider:

解譯​ 資料 ​陣列中值的指示:

  • 適用於trackingEventType TRACKING_AUTHENTICATION:

    • 0 — 權杖要求是否成功(true/false),如果成功:
    • 1 - MVPD ID字串
    • 2 - GUID (md5雜湊)
    • 3 — 權杖已在快取中(true/false)
    • 4 — 裝置型別
    • 5 - AccessEnabler使用者端型別
    • 6 — 作業系統型別
  • 適用於trackingEventType TRACKING_AUTHORIZATION:

    • 0 — 權杖要求是否成功(true/false),如果成功:
    • 1 - MVPD ID
    • 2 - GUID (md5雜湊)
    • 3 — 權杖已在快取中(true/false)
    • 4 — 錯誤
    • 5 — 詳細資料
    • 6 — 裝置型別
    • 7 - AccessEnabler使用者端型別
    • 8 — 作業系統型別
  • 適用於trackingEventType TRACKING_GET_SELECTED_PROVIDER:

    • 0 — 目前所選MVPD的識別碼
    • 1 — 裝置型別
    • 2 - AccessEnabler使用者端型別
    • 3 — 作業系統型別
recommendation-more-help
3f5e655c-af63-48cc-9769-2b6803cc5f4b