傳遞使用者端資訊(裝置、連線和應用程式) pass-client-info
範圍 pass-client-info-scope
本檔案會彙總詳細資料和逐步指南,以便從程式設計人員應用程式傳遞使用者端資訊(裝置、連線和應用程式)至Adobe Pass驗證REST API或SDK。
提供使用者端資訊的好處包括:
- 在某些裝置型別和可支援HBA的MVPD的情況下,能夠正確啟用Home Base Authentication (HBA)。
- 在部分裝置型別的情況下正確套用TTL的功能(例如,為電視連線裝置上的驗證工作階段設定較長的TTL)。
- 能夠使用軟體權利檔案服務監控(ESM)在各種裝置型別中,正確彙總劃分報表中的商業量度。
- 解除封鎖正確套用各種商業規則的能力(例如 降級)。
概觀 pass-client-info-overview
使用者端資訊包含:
- 裝置 使用者嘗試使用程式設計師內容之裝置的軟硬體屬性資訊。
- 連線 使用者連線至Adobe Pass Authentication Services和/或程式設計師服務(例如伺服器對伺服器實作)之裝置連線屬性的相關資訊。
- 應用程式 使用者嘗試使用程式設計師內容之註冊應用程式的資訊。
使用者端資訊是使用下表呈現的金鑰建置的JSON物件。
primaryHardwareType
、osName
、osFamily
、browserName
、browserVendor
、connectionSecure
。API參考 api-ref
本節介紹負責在使用Adobe Pass驗證REST API或SDK時處理使用者端資訊的API。
REST API rest-api
Adobe Pass驗證服務支援以下列方式接收使用者端資訊:
- 作為 標頭: "X-Device-Info"
- 作為 查詢引數: "device_info"
- 作為 貼文引數: "device_info"
SDK
JAVASCRIPT SDK js-sdk
AccessEnabler JavaScript SDK預設會建置使用者端資訊JSON物件,除非覆寫,否則會傳遞至Adobe Pass驗證服務。
AccessEnabler JavaScript SDK僅支援 透過setRequestor的 applicationId 選項引數,覆寫使用者端資訊JSON物件中的"applicationId"金鑰。
applicationId
引數值必須是純文字字串值。如果程式設計師應用程式決定傳遞applicationId,則其餘的使用者端資訊金鑰仍會由AccessEnabler JavaScript SDK計算。
iOS/tvOS SDK ios-tvos-sdk
AccessEnabler iOS/tvOS SDK預設會建置使用者端資訊JSON物件,除非覆寫,否則會傳遞至Adobe Pass驗證服務。
AccessEnabler iOS/tvOS SDK支援 透過setOptions的device_info引數覆寫整個 使用者端資訊JSON物件。
Android/FireOS SDK and-fire-os-sdk
AccessEnabler
Android/FireOS SDK預設會建置使用者端資訊JSON物件,除非覆寫,否則會傳遞至Adobe Pass驗證服務。
AccessEnabler
Android/FireOS SDK支援 透過setOptions的/setOptions的device_info
引數覆寫整個 使用者端資訊JSON物件。
device_info
引數值必須是 Base64編碼 字串值。逐步指南 cookbooks
本節提供在不同裝置型別的情況下建置使用者端資訊JSON物件的逐步指南。
Android android
裝置資訊的建構方式如下:
連線資訊的建構方式如下:
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
getSystemService(Context.CONNECTIVITY_SERVICE).getActiveNetworkInfo().getType()
"WIFI","BLUETOOTH","MOBILE","ETHERNET","VPN","DUMMY","MOBILE_DUN","WIMAX","notAccessible"
應用程式資訊的建構方式如下:
範常式式碼
private JSONObject computeClientInformation() {
String LOGGING_TAG = "DefineClass.class";
JSONObject clientInformation = new JSONObject();
String connectionType;
try {
ConnectivityManager cm = (ConnectivityManager) getContext().getSystemService(CONNECTIVITY_SERVICE);
NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
if (activeNetwork != null && activeNetwork.isConnectedOrConnecting()) {
switch (activeNetwork.getType()) {
case ConnectivityManager.TYPE_WIFI: {
connectionType = "WIFI";
break;
}
case ConnectivityManager.TYPE_BLUETOOTH: {
connectionType = "BLUETOOTH";
break;
}
case ConnectivityManager.TYPE_MOBILE: {
connectionType = "MOBILE";
break;
}
case ConnectivityManager.TYPE_ETHERNET: {
connectionType = "ETHERNET";
break;
}
case ConnectivityManager.TYPE_VPN: {
connectionType = "VPN";
break;
}
case ConnectivityManager.TYPE_DUMMY: {
connectionType = "DUMMY";
break;
}
case ConnectivityManager.TYPE_MOBILE_DUN: {
connectionType = "MOBILE_DUN";
break;
}
case ConnectivityManager.TYPE_WIMAX: {
connectionType = "WIMAX";
break;
}
default:
connectionType = ConnectivityManager.EXTRA_OTHER_NETWORK_INFO;
}
} else {
connectionType = ConnectivityManager.EXTRA_NO_CONNECTIVITY;
}
} catch (Exception e) {
connectionType = "notAccessible";
}
try {
clientInformation.put("model",Build.MODEL);
clientInformation.put("vendor", Build.BRAND);
clientInformation.put("manufacturer",Build.MANUFACTURER);
clientInformation.put("version",Build.DEVICE);
clientInformation.put("osName","Android");
clientInformation.put("osVersion",Build.VERSION.RELEASE);
clientInformation.put("connectionType",connectionType);
clientInformation.put("applicationId","CNN");
} catch (JSONException e) {
Log.e(LOGGING_TAG, e.getMessage());
}
return Base64.encodeToString(clientInformation.toString().getBytes(), Base64.NO_WRAP);
}
FireTV fire-tv
裝置資訊的建構方式如下:
連線資訊的建構方式如下:
應用程式資訊的建構方式如下:
iOS/tvOS ios-tvos
裝置資訊的建構方式如下:
連線資訊的建構方式如下:
應用程式資訊的建構方式如下:
範常式式碼
+ (NSString *)computeClientInformation {
struct utsname u;
uname(&u);
NSString *hardware = [NSString stringWithCString:u.machine encoding:NSUTF8StringEncoding];
UIDevice *device = [UIDevice currentDevice];
NSString *deviceType;
switch (UI_USER_INTERFACE_IDIOM()) {
case UIUserInterfaceIdiomPhone:
deviceType = @"MobilePhone";
break;
case UIUserInterfaceIdiomPad:
deviceType = @"Tablet";
break;
case UIUserInterfaceIdiomTV:
deviceType = @"TV";
break;
default:
deviceType = @"Unknown";
}
CGRect screenRect = [[UIScreen mainScreen] bounds];
NSNumber *screenWidth = @((float) screenRect.size.width);
NSNumber *screenHeight = @((float) screenRect.size.height);
Reachability *reachability = [Reachability reachabilityForInternetConnection];
[reachability startNotifier];
NetworkStatus status = [reachability currentReachabilityStatus];
NSString *connectionType;
if (status == NotReachable) {
connectionType = @"notConnected";
} else if (status == ReachableViaWiFi) {
connectionType = @"WiFi";
} else if (status == ReachableViaWWAN) {
connectionType = @"cellular";
}
NSMutableDictionary *clientInformation = [@{
@"type": deviceType,
@"model": device.model,
@"vendor": @"Apple",
@"manufacturer": @"Apple",
@"version": [hardware stringByReplacingOccurrencesOfString:device.model withString:@""],
@"osName": device.systemName,
@"osVersion": device.systemVersion,
@"displayWidth": screenWidth,
@"displayHeight": screenHeight,
@"connectionType": connectionType,
@"applicationId": @"CNN"
} mutableCopy];
NSError *error;
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:clientInformation options:NSJSONWritingPrettyPrinted error:&error];
NSString *base64Encoded = [jsonData base64EncodedStringWithOptions:0];
return base64Encoded;
}
Roku roku
裝置資訊的建構方式如下:
連線資訊的建構方式如下:
應用程式資訊的建構方式如下:
XBOX 1/360 xbox
裝置資訊的建構方式如下:
連線資訊的建構方式如下:
應用程式資訊的建構方式如下:
資源