传递客户端信息(设备、连接和应用程序) 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身份验证服务和/或程序员服务的设备的连接属性的信息(例如,服务器到服务器实现)。
- 应用程序 有关用户从中尝试使用程序员内容的已注册应用程序的信息。
客户端信息是使用下表提供的键构建的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"
- 作为 post参数: "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
设备信息可通过以下方式构建:
连接信息可通过以下方式构建:
应用程序信息可通过以下方式构建:
资源