ヘッダー – X-Device-Info
- トピック:
- 認証
概要
X-Device-Info 要求ヘッダーは、実際のストリーミング デバイスに関連するクライアント情報(デバイス、接続、およびアプリケーション)を格納し、MVPD が適用する可能性のあるプラットフォーム固有のルールを決定するために使用されます。
構文
X-Device-Info: <device_information> | |
ヘッダータイプ | リクエストヘッダー |
標準 | 不可 |
ディレクティブ
<device_information>
次の表で必要とマークされた属性を少なくとも含む JSON 要素の Base64-encoded
値。
Presence | キー | 説明 | 制限付き | 可能な値 |
---|---|---|---|---|
primary ハードウェアタイプ | デバイスの主要なハードウェアの種類。 | ✓ |
値は制限されています。
| |
必須 | モデル | デバイスのモデル名。 | 例:iPhone、SM-G930V、AppleTV など | |
必須 | version | デバイスのバージョン。 | 例:2.0.1 など | |
製造元 | デバイスの製造会社/組織。 | 例:Samsung、LG、ZTE、Huawei、Motorola、Appleなど | ||
ベンダー | デバイスの販売会社/組織。 | 例:Apple、Samsung、LG、Googleなど | ||
必須 | osName | デバイスのオペレーティングシステム(OS)名。 | ✓ |
値は制限されています。
|
osFamily | デバイスのオペレーティングシステム(OS)グループ名。 | ✓ |
値は制限されています。
| |
osVendor | デバイスのオペレーティングシステム(OS)のサプライヤ。 | ✓ |
値は制限されています。
| |
必須 | osVersion | デバイスのオペレーティングシステム(OS)のバージョン。 | 例:10.2、9.0.1 など | |
browserName | ブラウザーの名前。 | ✓ |
値は制限されています。
| |
browserVendor | ブラウザーの建物会社/組織。 | ✓ |
値は制限されています。
| |
browserVersion | デバイスのブラウザーのバージョン。 | 例:60.0.3112 | ||
userAgent | デバイスのユーザーエージェント。 | 例:Mozilla/5.0 (Macintosh、Intel Mac OS X 10_12_3) AppleWebKit/602.4.8 (KHTML、Gecko など) Version/10.0.3 Safari/602.4.8 | ||
displayWidth | デバイスの物理的な画面の幅。 | |||
displayHeight | デバイスの物理的な画面の高さ。 | |||
displayPpi | デバイスの物理的な画面のピクセル密度。 | 例:294 | ||
diagonalScreenSize | デバイスの物理的な画面の斜めの寸法(インチ)。 | 例:5.5、10.1 | ||
connectionIp | HTTP リクエストの送信に使用するデバイスの IP。 | 例 8.8.4.4 | ||
connectionPort | HTTP リクエストの送信に使用するデバイスのポート。 | 例:53124 | ||
必須 | connectionType | ネットワーク接続タイプ。 | 例:WiFi、LAN、3G、4G、5G | |
connectionSecure | ネットワーク接続のセキュリティの状態。 | ✓ |
値は制限されています。
| |
applicationId | アプリケーションの一意の ID。 | 例:REF30 |
例
// Device information
// {
// "primaryHardwareType" : "MobilePhone",
// "model":"SM-S901U",
// "vendor":"samsung",
// "version":"r0q",
// "manufacturer":"samsung",
// "osName":"Android",
// "osVersion":"14"
// }
// BASE64-encoded
// ewogICJwcmltYXJ5SGFyZHdhcmVUeXBlIiA6ICJNb2JpbGVQaG9uZSIsCiAgIm1vZGVsIjoiU00tUzkwMVUiLAogICJ2ZW5kb3I
// iOiJzYW1zdW5nIiwKICAidmVyc2lvbiI6InIwcSIsCiAgIm1hbnVmYWN0dXJlciI6InNhbXN1bmciLAogICJvc05hbWUiOiJBbmRyb
// 2lkIiwKICAib3NWZXJzaW9uIjoiMTQiCn0=
X-Device-Info: ewogICJwcmltYXJ5SGFyZHdhcmVUeXBlIiA6ICJNb2JpbGVQaG9uZSIsCiAgIm1vZGVsIjoiU00tUzkwMVUiLAogICJ2ZW5kb3IiOiJzYW1zdW5nIiwKICAidmVyc2lvbiI6InIwcSIsCiAgIm1hbnVmYWN0dXJlciI6InNhbXN1bmciLAogICJvc05hbWUiOiJBbmRyb2lkIiwKICAib3NWZXJzaW9uIjoiMTQiCn0=
クックブック
X-Device-Info
ヘッダーには、「 ディレクティブセクションで説明されている形式の値が含まれている必要があります。ブラウザー
ブラウザーで実行されているクライアントアプリケーションの場合、ブラウザーは X-Device-Info
ヘッダーに必要な最小限の情報のセットを自動的に送信するので、User-Agent
ヘッダーは省略できます。
引き続き X-Device-Info
ヘッダーを使用して、デバイス、接続、およびアプリケーションに関する追加情報を提供できます。これは、デバイス識別メカニズムを提供するライブラリまたはサービスをクライアントアプリケーションが統合する場合に可能です。
モバイルデバイス
iOSと iPadOS
iOSまたは iPadOS を実行するデバイスの X-Device-Info
ヘッダーを作成するには、次のドキュメントと以下のコードスニペットを参照してください。
+ (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": @"REF30"
} mutableCopy];
NSError *error;
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:clientInformation options:NSJSONWritingPrettyPrinted error:&error];
NSString *base64Encoded = [jsonData base64EncodedStringWithOptions:0];
return base64Encoded;
}
デバイス情報は、次のように構成できます。
接続情報は、次のように作成できます。
アプリケーション情報は、次の方法で作成できます。
Android
Android を実行するデバイスの X-Device-Info
ヘッダーを作成するには、次のドキュメントと以下のコードスニペットを参照します。
- ビルドクラスのAndroid開発者向けドキュメント。
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", "REF30");
} catch (JSONException e) {
Log.e(LOGGING_TAG, e.getMessage());
}
return Base64.encodeToString(clientInformation.toString().getBytes(), Base64.NO_WRAP);
}
デバイス情報は、次のように構成できます。
接続情報は、次のように作成できます。
<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"
アプリケーション情報は、次の方法で作成できます。
+ (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": @"REF30"
} mutableCopy];
NSError *error;
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:clientInformation options:NSJSONWritingPrettyPrinted error:&error];
NSString *base64Encoded = [jsonData base64EncodedStringWithOptions:0];
return base64Encoded;
}
デバイス情報は、次のように構成できます。
接続情報は、次のように作成できます。
アプリケーション情報は、次の方法で作成できます。
Fire OS
Fire OS を実行するデバイスの X-Device-Info
ヘッダーを作成するには、次のドキュメントを参照してください。
- ビルドクラスのAndroid開発者向けドキュメント。
- Amazon開発者向けドキュメント Fire TV デバイスの識別。
デバイス情報は、次のように構成できます。
接続情報は、次のように作成できます。
アプリケーション情報は、次の方法で作成できます。
Roku OS
Roku OS を実行するデバイスの X-Device-Info
ヘッダーを作成するには、次のドキュメントを参照してください。
- ifDeviceInfo 用の Roku 開発者向けドキュメント。
デバイス情報は、次のように構成できます。
接続情報は、次のように作成できます。
アプリケーション情報は、次の方法で作成できます。
その他
ドキュメントに記載されていないデバイスプラットフォームの場合、クライアント情報(デバイス、接続、アプリケーション)は、通常、デバイスのハードウェアおよび OS のマニュアルに記載されている利用可能なハードウェアおよび OS の属性にリンクする必要があります。