En-Tête - X-Device-Info header-x-device-info
Vue d’ensemble overview
L’en-tête de requête X-Device-Info contient les informations client (appareil, connexion et application) liées à l’appareil de diffusion en continu actuel et est utilisé pour déterminer les règles spécifiques à la plateforme que les MVPD peuvent appliquer.
Syntaxe syntax
Directives directives
<device_information>
Valeur Base64-encoded
de l’élément JSON contenant au moins les attributs marqués comme requis par le tableau suivant.
Exemples examples
// 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=
Livres de cuisine cookbooks
X-Device-Info
doit contenir une valeur formatée comme décrit dans la section Directives.Navigateurs browsers
Pour les applications clientes s’exécutant dans un navigateur, l’en-tête X-Device-Info
peut être omis, car le navigateur envoie automatiquement un ensemble minimal d’informations requises dans l’en-tête User-Agent
.
Vous pouvez toujours utiliser l’en-tête X-Device-Info
pour fournir des informations supplémentaires sur l’appareil, la connexion et l’application, au cas où votre application cliente intègre une bibliothèque ou un service qui fournit un mécanisme d’identification de l’appareil.
Appareils mobiles mobile-devices
iOS et iPadOS ios-ipados
Pour créer l’en-tête X-Device-Info
pour les appareils exécutant iOS ou iPadOS, vous pouvez vous reporter aux documents suivants et au fragment de code ci-dessous :
- Documentation Apple destinée aux développeurs pour UIDevice.
- Documentation Apple destinée aux développeurs pour accessibilité.
- Documentation manuelle Linux pour 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;
}
Les informations sur le périphérique peuvent être structurées de la manière suivante :
Les informations de connexion peuvent être construites comme suit :
Les informations d’application peuvent être structurées comme suit :
Android android
Pour créer l’en-tête X-Device-Info
pour les appareils exécutant Android, vous pouvez vous reporter aux documents suivants et au fragment de code ci-dessous :
- Documentation Android destinée aux développeurs pour la classe Build.
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);
}
Les informations sur le périphérique peuvent être structurées de la manière suivante :
Les informations de connexion peuvent être construites comme suit :
<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"
Les informations d’application peuvent être structurées comme suit :
Appareils connectés au téléviseur tv-connected-devices
tvOS tvos
Pour créer l’en-tête X-Device-Info
pour les appareils exécutant tvOS, vous pouvez vous reporter aux documents suivants et au fragment de code ci-dessous :
- Documentation Apple destinée aux développeurs pour UIDevice.
- Documentation Apple destinée aux développeurs pour accessibilité.
- Documentation manuelle Linux pour 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;
}
Les informations sur le périphérique peuvent être structurées de la manière suivante :
Les informations de connexion peuvent être construites comme suit :
Les informations d’application peuvent être structurées comme suit :
Système d’exploitation Fire fireos
Pour créer l’en-tête X-Device-Info
pour les appareils exécutant Fire OS, vous pouvez vous reporter aux documents suivants :
- Documentation Android destinée aux développeurs pour la classe Build.
- Documentation Amazon destinée aux développeurs pour Identification des périphériques Fire TV.
Les informations sur le périphérique peuvent être structurées de la manière suivante :
Les informations de connexion peuvent être construites comme suit :
Les informations d’application peuvent être structurées comme suit :
Roku OS rokuos
Pour créer l’en-tête X-Device-Info
pour les appareils exécutant Roku OS, vous pouvez vous reporter aux documents suivants :
- Documentation Roku destinée aux développeurs pour ifDeviceInfo.
Les informations sur le périphérique peuvent être structurées de la manière suivante :
Les informations de connexion peuvent être construites comme suit :
Les informations d’application peuvent être structurées comme suit :
Autres others
Pour les plateformes d’appareils non couvertes dans la documentation, les informations client (appareil, connexion et application) doivent être liées à tous les attributs matériels et de système d’exploitation disponibles, généralement spécifiés dans les manuels relatifs au matériel et au système d’exploitation de l’appareil.