Kopfzeile - x-device-info
- Themen:
- Authentifizierung
Übersicht
Der X-Device-Info-Anfrage-Header enthält die Client-Informationen (Gerät, Verbindung und Anwendung), die sich auf das eigentliche Streaming-Gerät beziehen, und wird verwendet, um plattformspezifische Regeln zu bestimmen, die von MVPDs erzwungen werden können.
Syntax
X-Device-Info: <device_information> | |
Kopfzeilentyp | Anfrage-Header |
Standard | Nein |
Anweisungen
<device_information>
Der Base64-encoded
des JSON-Elements, das mindestens die Attribute enthält, die in der folgenden Tabelle als erforderlich markiert sind.
Präsenz | Schlüssel | Beschreibung | eingeschränkt | Mögliche Werte |
---|---|---|---|---|
primaryHardwareType | Der primäre Hardwaretyp des Geräts. | ✓ |
Die Werte sind eingeschränkt:
| |
required | Modell | Der Modellname des Geräts. | z. B. iPhone, SM-G930V, AppleTV usw. | |
required | Version | Die Version des Geräts. | z. B. 2.0.1 usw. | |
Hersteller | Die Produktionsfirma/-organisation des Geräts. | z. B. Samsung, LG, ZTE, Huawei, Motorola, Apple usw. | ||
Lieferant | Die verkaufende Firma/Organisation des Geräts. | z. B. Apple, Samsung, LG, Google usw. | ||
required | osName | Der Name des Betriebssystems (OS) des Geräts. | ✓ |
Die Werte sind eingeschränkt:
|
Betriebssystemfamilie | Der Gruppenname des Betriebssystems (OS) des Geräts. | ✓ |
Die Werte sind eingeschränkt:
| |
Betriebssystemanbieter | Der Anbieter des Betriebssystems (OS) des Geräts. | ✓ |
Die Werte sind eingeschränkt:
| |
required | osVersion | Die Betriebssystemversion des Geräts. | z. B. 10.2, 9.0.1 usw. | |
browserName | Der Name des Browsers. | ✓ |
Die Werte sind eingeschränkt:
| |
browserVendor | Die Firma/Organisation, die den Browser erstellt. | ✓ |
Die Werte sind eingeschränkt:
| |
browserVersion | Die Browser-Version des Geräts. | z. B. 60.0.3112 | ||
userAgent | Der Benutzeragent des Geräts. | z. B. Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/602.4.8 (KHTML, wie Gecko) Version/10.0.3 Safari/602.4.8 | ||
displayWidth | Die physische Bildschirmbreite des Geräts. | |||
displayHeight | Die physische Bildschirmhöhe des Geräts. | |||
displayPpi | Die physische Pixeldichte des Bildschirms des Geräts. | Beispiel: 294 | ||
diagonalScreenSize | Die Bildschirmdiagonale des Geräts in Zoll. | z. B. 5.5, 10.1 | ||
connectionIP | Die IP des Geräts, die zum Senden von HTTP-Anfragen verwendet wird. | z. B. 8.8.4.4 | ||
connectionPort | Der Port des Geräts, der zum Senden von HTTP-Anfragen verwendet wird. | z. B. 53124 | ||
required | connectionType | Der Netzwerkverbindungstyp. | z. B. WiFi, LAN, 3G, 4G, 5G | |
connectionSecure | Der Sicherheitsstatus der Netzwerkverbindung. | ✓ |
Die Werte sind eingeschränkt:
| |
applicationId | Die eindeutige Kennung der Anwendung. | z. B. REF30 |
Beispiele
// 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=
Cookbooks
X-Device-Info
-Kopfzeile einen Wert enthalten, der wie im Abschnitt Anweisungen beschrieben formatiert ist.Browser
Bei Client-Anwendungen, die in einem Browser ausgeführt werden, kann die X-Device-Info
-Kopfzeile weggelassen werden, da der Browser automatisch einen minimalen Satz der erforderlichen Informationen in der User-Agent
-Kopfzeile sendet.
Sie können den X-Device-Info
-Header weiterhin verwenden, um zusätzliche Informationen über das Gerät, die Verbindung und das Programm bereitzustellen, falls Ihre Client-Anwendung eine Bibliothek oder einen Service integriert, die bzw. der einen Mechanismus zur Geräteerkennung bereitstellt.
Mobilgeräte
iOS und iPadOS
Um den X-Device-Info
-Header für Geräte zu erstellen, auf denen iOS oder iPadOS ausgeführt wird, können Sie die folgenden Dokumente und das folgende Codefragment lesen:
- Apple-Entwicklerdokumentation für UIDevice.
- Apple-Entwicklerdokumentation für Erreichbarkeit.
- Linux-Dokumentation für uname.
+ (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;
}
Die Geräteinformationen können wie folgt aufgebaut werden:
Die Verbindungsinformationen können wie folgt aufgebaut werden:
Die Anwendungsinformationen können wie folgt aufgebaut werden:
Android
Um den X-Device-Info
-Header für Geräte zu erstellen, auf denen Android ausgeführt wird, können Sie die folgenden Dokumente und das folgende Codefragment lesen:
- Android-Entwicklerdokumentation für Build-Klasse.
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);
}
Die Geräteinformationen können wie folgt aufgebaut werden:
Die Verbindungsinformationen können wie folgt aufgebaut werden:
<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"
Die Anwendungsinformationen können wie folgt aufgebaut werden:
TV-Geräte angeschlossen
tvOS
Um den X-Device-Info
-Header für Geräte zu erstellen, auf denen tvOS ausgeführt wird, lesen Sie die folgenden Dokumente und das folgende Codefragment:
- Apple-Entwicklerdokumentation für UIDevice.
- Apple-Entwicklerdokumentation für Erreichbarkeit.
- Linux-Dokumentation für uname.
+ (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;
}
Die Geräteinformationen können wie folgt aufgebaut werden:
Die Verbindungsinformationen können wie folgt aufgebaut werden:
Die Anwendungsinformationen können wie folgt aufgebaut werden:
Betriebssystem auslösen
Informationen zum Erstellen des X-Device-Info
-Headers für Geräte, auf „Fire OS ausgeführt wird, finden Sie in den folgenden Dokumenten:
- Android-Entwicklerdokumentation für Build-Klasse.
- Amazon-Entwicklerdokumentation für Identifizieren von Fire-TV-)
Die Geräteinformationen können wie folgt aufgebaut werden:
Die Verbindungsinformationen können wie folgt aufgebaut werden:
Die Anwendungsinformationen können wie folgt aufgebaut werden:
Roku OS
Informationen zum Erstellen des X-Device-Info
-Headers für Geräte, auf (Roku OS ausgeführt wird, finden Sie in den folgenden Dokumenten:
- Roku-Entwicklerdokumentation für ifDeviceInfo.
Die Geräteinformationen können wie folgt aufgebaut werden:
Die Verbindungsinformationen können wie folgt aufgebaut werden:
Die Anwendungsinformationen können wie folgt aufgebaut werden:
Sonstige
Für Geräteplattformen, die nicht in der Dokumentation behandelt werden, sollten die Client-Informationen (Gerät, Verbindung und Anwendung) mit allen verfügbaren Hardware- und Betriebssystemattributen verknüpft werden, die normalerweise in den Hardware- und Betriebssystemhandbüchern des Geräts angegeben sind.