Intestazione - X-Device-Info
- Argomenti:
- Autenticazione
Panoramica
L'intestazione della richiesta X-Device-Info contiene le informazioni client (dispositivo, connessione e applicazione) relative al dispositivo di streaming effettivo e viene utilizzata per determinare le regole specifiche della piattaforma che gli MVPD possono applicare.
Sintassi
X-Device-Info: <informazioni_dispositivo> | |
Tipo di intestazione | Intestazione richiesta |
Standard | No |
Direttive
<informazioni_dispositivo>
Il valore Base64-encoded
dell'elemento JSON contenente almeno gli attributi contrassegnati come richiesto dalla tabella seguente.
Presenza | Chiave | Descrizione | Limitato | Valori possibili |
---|---|---|---|---|
primaryHardwareType | Il tipo di hardware principale del dispositivo. | ✓ |
I valori sono limitati:
| |
obbligatorio | modello | Il nome del modello del dispositivo. | ad es. iPhone, SM-G930V, AppleTV, ecc. | |
obbligatorio | version | Versione del dispositivo. | ad esempio 2.0.1, ecc. | |
produttore | La società/organizzazione di produzione del dispositivo. | ad es. Samsung, LG, ZTE, Huawei, Motorola, Apple, ecc. | ||
fornitore | La società/organizzazione di vendita del dispositivo. | ad es. Apple, Samsung, LG, Google, ecc. | ||
obbligatorio | osName | Il nome del sistema operativo del dispositivo. | ✓ |
I valori sono limitati:
|
osFamily | Il nome del gruppo del sistema operativo del dispositivo. | ✓ |
I valori sono limitati:
| |
osVendor | Il fornitore del sistema operativo del dispositivo. | ✓ |
I valori sono limitati:
| |
obbligatorio | osVersion | Versione del sistema operativo del dispositivo. | ad esempio 10.2, 9.0.1, ecc. | |
browserName | Nome del browser. | ✓ |
I valori sono limitati:
| |
browserVendor | La società/organizzazione di costruzione del browser. | ✓ |
I valori sono limitati:
| |
browserVersion | Versione del browser del dispositivo. | esempio: 60.0.3112 | ||
userAgent | L’agente utente del dispositivo. | ad esempio Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/602.4.8 (KHTML, like Gecko) versione/10.0.3 Safari/602.4.8 | ||
displayWidth | Larghezza fisica dello schermo del dispositivo. | |||
displayHeight | L’altezza fisica dello schermo del dispositivo. | |||
displayPpi | Densità fisica dei pixel dello schermo del dispositivo. | Esempio: 294 | ||
diagonalScreenSize | La dimensione diagonale dello schermo fisico del dispositivo, espressa in pollici. | ad es. 5.5, 10.1 | ||
connectionIp | L’IP del dispositivo utilizzato per inviare richieste HTTP. | es. 8.8.4.4 | ||
connectionPort | Porta del dispositivo utilizzata per l’invio di richieste HTTP. | ad es. 53124 | ||
obbligatorio | connectionType | Tipo di connessione di rete. | ad esempio WiFi, LAN, 3G, 4G, 5G | |
connectionSecure | Stato di protezione della connessione di rete. | ✓ |
I valori sono limitati:
| |
applicationId | L’identificatore univoco dell’applicazione. | es. REF30 |
Esempi
// 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=
Cookbook
X-Device-Info
deve contenere un valore formattato come descritto nella sezione Direttive.Browser
Per le applicazioni client in esecuzione in un browser, è possibile omettere l'intestazione X-Device-Info
in quanto il browser invierà automaticamente un set minimo di informazioni richieste nell'intestazione User-Agent
.
È comunque possibile utilizzare l'intestazione X-Device-Info
per fornire informazioni aggiuntive sul dispositivo, sulla connessione e sull'applicazione, nel caso in cui l'applicazione client integri una libreria o un servizio che fornisce un meccanismo di identificazione del dispositivo.
Dispositivi mobili
iOS e iPadOS
Per generare l'intestazione X-Device-Info
per i dispositivi che eseguono iOS o iPadOS, è possibile fare riferimento ai seguenti documenti e frammenti di codice:
- Documentazione per gli sviluppatori di Apple per UIDevice.
- Documentazione per gli sviluppatori di Apple per Raggiungibilità.
- Documentazione manuale Linux per 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;
}
Le informazioni sul dispositivo possono essere costruite nel modo seguente:
Le informazioni di connessione possono essere costruite nel modo seguente:
Le informazioni sull'applicazione possono essere costruite nel modo seguente:
Android
Per generare l'intestazione X-Device-Info
per i dispositivi che eseguono Android, è possibile fare riferimento ai seguenti documenti e frammenti di codice:
- Documentazione per gli sviluppatori di Android per 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);
}
Le informazioni sul dispositivo possono essere costruite nel modo seguente:
Le informazioni di connessione possono essere costruite nel modo seguente:
<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"
Le informazioni sull'applicazione possono essere costruite nel modo seguente:
Dispositivi collegati al televisore
tvOS
Per generare l'intestazione X-Device-Info
per i dispositivi che eseguono tvOS, è possibile fare riferimento ai seguenti documenti e frammenti di codice:
- Documentazione per gli sviluppatori di Apple per UIDevice.
- Documentazione per gli sviluppatori di Apple per Raggiungibilità.
- Documentazione manuale Linux per 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;
}
Le informazioni sul dispositivo possono essere costruite nel modo seguente:
Le informazioni di connessione possono essere costruite nel modo seguente:
Le informazioni sull'applicazione possono essere costruite nel modo seguente:
Fire OS
Per generare l'intestazione X-Device-Info
per i dispositivi che eseguono Fire OS, è possibile fare riferimento ai seguenti documenti:
- Documentazione per gli sviluppatori di Android per la classe Build.
- Documentazione per gli sviluppatori di Amazon per Identificazione dei dispositivi Fire TV.
Le informazioni sul dispositivo possono essere costruite nel modo seguente:
Le informazioni di connessione possono essere costruite nel modo seguente:
Le informazioni sull'applicazione possono essere costruite nel modo seguente:
Sistema operativo Roku
Per generare l'intestazione X-Device-Info
per i dispositivi che eseguono Roku OS, è possibile fare riferimento ai seguenti documenti:
- Documentazione per gli sviluppatori Roku per ifDeviceInfo.
Le informazioni sul dispositivo possono essere costruite nel modo seguente:
Le informazioni di connessione possono essere costruite nel modo seguente:
Le informazioni sull'applicazione possono essere costruite nel modo seguente:
Altri
Per le piattaforme per dispositivi non incluse nella documentazione, le informazioni sul client (dispositivo, connessione e applicazione) devono essere collegate a qualsiasi attributo hardware e sistema operativo disponibile, in genere specificato nei manuali hardware e del sistema operativo del dispositivo.