<!--- # license: Licensed to the Apache Software Foundation (ASF) under one # or more contributor license agreements. See the NOTICE file # distributed with this work for additional information # regarding copyright ownership. The ASF licenses this file # to you under the Apache License, Version 2.0 (the # "License"); you may not use this file except in compliance # with the License. You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, # software distributed under the License is distributed on an # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY # KIND, either express or implied. See the License for the # specific language governing permissions and limitations # under the License. --> # cordova-plugin-contacts [![Build Status](https://travis-ci.org/apache/cordova-plugin-contacts.svg)](https://travis-ci.org/apache/cordova-plugin-contacts) Questo plugin definisce un oggetto globale `navigator.contacts`, che fornisce l'accesso al database di contatti del dispositivo. Anche se l'oggetto è associato con ambito globale del `navigator`, non è disponibile fino a dopo l'evento `deviceready`. document.addEventListener("deviceready", onDeviceReady, false); function onDeviceReady() { console.log(navigator.contacts); } **Avviso**: raccolta e utilizzo dei dati di contatto solleva questioni di privacy importante. Politica sulla privacy dell'app dovrebbe discutere come app utilizza i dati di contatto e se è condiviso con altre parti. Informazioni di contatto sono considerate sensibile perché rivela le persone con cui una persona comunica. Pertanto, oltre alla politica di privacy dell'app, è fortemente consigliabile fornendo un preavviso di just-in-time prima app accede o utilizza i dati di contatto, se il sistema operativo del dispositivo non farlo già. Tale comunicazione deve fornire le informazioni stesse notate sopra, oltre ad ottenere l'autorizzazione (ad esempio, presentando scelte per **OK** e **No grazie**). Si noti che alcuni mercati app possono richiedere l'app per fornire un preavviso di just-in-time e ottenere l'autorizzazione dell'utente prima di accedere ai dati di contatto. Un'esperienza utente chiara e facile--capisce che circonda l'uso del contatto dati aiuta a evitare la confusione dell'utente e percepito un uso improprio dei dati di contatto. Per ulteriori informazioni, vedere la guida sulla Privacy. ## Installazione Ciò richiede cordova 5.0 + (v 1.0.0 stabile corrente) cordova plugin add cordova-plugin-contacts Versioni precedenti di cordova comunque possono installare tramite l'id **deprecato** (stantio v0.2.16) cordova plugin add org.apache.cordova.contacts È anche possibile installare direttamente tramite url di repo (instabile) cordova plugin add https://github.com/apache/cordova-plugin-contacts.git ### Firefox OS stranezze Creare **www/manifest.webapp** come descritto nel [Manifest Docs](https://developer.mozilla.org/en-US/Apps/Developing/Manifest). Aggiungi permisions rilevanti. C'è anche la necessità di modificare il tipo di webapp in "privilegiato" - [Manifest Docs](https://developer.mozilla.org/en-US/Apps/Developing/Manifest#type). **AVVERTENZA**: tutte le apps privilegiato applicare [Content Security Policy](https://developer.mozilla.org/en-US/Apps/CSP) che vieta script inline. Inizializzare l'applicazione in un altro modo. "type": "privileged", "permissions": { "contacts": { "access": "readwrite", "description": "Describe why there is a need for such permission" } } ### Stranezze di Windows **Prima del Windows 10:** Eventuali contatti restituiti dai metodi `trovare` e `pickContact` sono readonly, quindi l'applicazione non può modificarli. Metodo `find` disponibile solo sui dispositivi Windows Phone 8.1. **Windows 10 e sopra:** Contatti possono essere salvati e deposito di app locale contatti verranno salvate. Contatti possono anche essere eliminati. ### Stranezze di Windows 8 Windows 8 contatti sono readonly. Tramite i contatti di Cordova API non sono queryable/ricerche, si dovrebbe informare l'utente di scegliere un contatto come una chiamata a contacts.pickContact che aprirà l'app 'Persone' dove l'utente deve scegliere un contatto. Eventuali contatti restituiti sono readonly, quindi l'applicazione non può modificarli. ## Navigator.contacts ### Metodi * navigator.contacts.create * navigator.contacts.find * navigator.contacts.pickContact ### Oggetti * Contact * ContactName * ContactField * ContactAddress * ContactOrganization * ContactFindOptions * ContactError * ContactFieldType ## navigator.contacts.create Il metodo `navigator.contacts.create` è sincrono e restituisce un nuovo oggetto di `Contact`. Questo metodo non mantiene l'oggetto contatto nel database contatti dispositivo, per cui è necessario richiamare il metodo `Contact.save`. ### Piattaforme supportate * Android * BlackBerry 10 * Firefox OS * iOS * Windows Phone 7 e 8 ### Esempio var myContact = navigator.contacts.create({"displayName": "Test User"}); ## navigator.contacts.find Il metodo `navigator.contacts.find` in modo asincrono, esegue una query sul database di contatti del dispositivo e restituisce una matrice di oggetti `Contact`. Gli oggetti risultanti vengono passati alla funzione di callback `contactSuccess` specificata dal parametro **contactSuccess**. Il parametro **contactFields** specifica i campi per essere utilizzato come un qualificatore di ricerca. Un parametro di lunghezza zero, **contactFields** non è valido e si traduce in `ContactError.INVALID_ARGUMENT_ERROR`. Un valore di **contactFields** di `"*"` ricerche campi tutti i contatti. La stringa di **contactFindOptions.filter** può essere utilizzata come un filtro di ricerca quando una query sul database di contatti. Se fornito, una distinzione, corrispondenza parziale valore viene applicato a ogni campo specificato nel parametro **contactFields**. Se esiste una corrispondenza per *qualsiasi* dei campi specificati, viene restituito il contatto. Uso **contactFindOptions.desiredFields** parametro di controllo quale contattare la proprietà deve essere rispedito indietro. ### Parametri * **contactFields**: contattare campi da utilizzare come un qualificatore di ricerca. *(DOMString[])* [Required] * **contactSuccess**: funzione di callback successo richiamato con la matrice di oggetti contatto restituiti dal database. [Required] * **contactError**: funzione di callback di errore, viene richiamato quando si verifica un errore. [Facoltativo] * **contactFindOptions**: opzioni per filtrare navigator.contacts di ricerca. [Optional] I tasti sono: * **filter**: la stringa di ricerca utilizzata per trovare navigator.contacts. *(DOMString)* (Default: `""`) * **multiple**: determina se l'operazione di ricerca restituisce più navigator.contacts. *(Boolean)* (Default: `false`) * **desiredFields**: contattare i campi per essere tornato indietro. Se specificato, il risultante `contatto` oggetto solo caratteristiche valori per questi campi. *(DOMString[])* [Optional] ### Piattaforme supportate * Android * BlackBerry 10 * Firefox OS * iOS * Windows Phone 7 e 8 * Windows (Windows Phone 8.1 e Windows 10) ### Esempio function onSuccess(contacts) { alert('Found ' + contacts.length + ' contacts.'); }; function onError(contactError) { alert('onError!'); }; // find all contacts with 'Bob' in any name field var options = new ContactFindOptions(); options.filter = "Bob"; options.multiple = true; options.desiredFields = [navigator.contacts.fieldType.id]; var fields = [navigator.contacts.fieldType.displayName, navigator.contacts.fieldType.name]; navigator.contacts.find(fields, onSuccess, onError, options); ### Stranezze di Windows * `__contactFields__`non è supportato, verrà ignorato. `find`metodo cercherà sempre di abbinare il nome, indirizzo email o numero di telefono di un contatto. ## navigator.contacts.pickContact Il metodo `navigator.contacts.pickContact` lancia il contatto selettore per selezionare un singolo contatto. L'oggetto risultante viene passato alla funzione di callback `contactSuccess` specificata dal parametro **contactSuccess**. ### Parametri * **contactSuccess**: funzione di callback di successo viene richiamato con il singolo oggetto di contatto. [Richiesto] * **contactError**: funzione di callback di errore, viene richiamato quando si verifica un errore. [Facoltativo] ### Piattaforme supportate * Android * iOS * Windows Phone 8 * Windows 8 * Windows ### Esempio navigator.contacts.pickContact(function(contact){ console.log('The following contact has been selected:' + JSON.stringify(contact)); },function(err){ console.log('Error: ' + err); }); ## Contact L'oggetto `Contact` rappresenta il contatto di un utente. Contatti possono essere creati, memorizzati o rimossi dal database di contatti dispositivo. Contatti possono anche essere estratto (singolarmente o in blocco) dal database richiamando il metodo `navigator.contacts.find`. **Nota**: non tutti i campi di contatto sopra elencati sono supportati su ogni piattaforma del dispositivo. Consultare la sezione di *stranezze* su ogni piattaforma per dettagli. ### Proprietà * **ID**: un identificatore univoco globale. *(DOMString)* * **displayName**: il nome di questo contatto, adatto per la visualizzazione a utenti finali. *(DOMString)* * **nome**: un oggetto che contiene tutti i componenti di un nome di persone. *(ContactName)* * **Nickname**: un nome informale con cui affrontare il contatto. *(DOMString)* * **phoneNumbers**: una matrice di numeri di telefono del contatto. *(ContactField[])* * **email**: una matrice di indirizzi di posta elettronica del contatto. *(ContactField[])* * **indirizzi**: una matrice di indirizzi di contatto. *(ContactAddress[])* * **IMS**: una matrice di indirizzi IM tutto il contatto. *(ContactField[])* * **organizzazioni**: una matrice di organizzazioni di tutto il contatto. *(ContactOrganization[])* * **compleanno**: il compleanno del contatto. *(Data)* * **Nota**: una nota sul contatto. *(DOMString)* * **foto**: una matrice di foto del contatto. *(ContactField[])* * **categorie**: matrice di tutte le categorie definite dall'utente connesso con il contatto. *(ContactField[])* * **URL**: matrice di pagine web connesso con il contatto. *(ContactField[])* ### Metodi * **clone**: restituisce una nuova `Contact` oggetto che è una copia completa dell'oggetto chiamante, con la `id` proprietà impostata`null`. * **rimuovere**: rimuove il contatto dal database contatti dispositivo, altrimenti esegue un callback di errore con un `ContactError` oggetto. * **Salva**: salva un nuovo contatto nel database di contatti del dispositivo, o aggiorna un contatto esistente se esiste già un contatto con lo stesso **id** . ### Piattaforme supportate * Amazon fuoco OS * Android * BlackBerry 10 * Firefox OS * iOS * Windows Phone 7 e 8 * Windows 8 * Windows ### Esempio di salvare function onSuccess(contact) { alert("Save Success"); }; function onError(contactError) { alert("Error = " + contactError.code); }; // create a new contact object var contact = navigator.contacts.create(); contact.displayName = "Plumber"; contact.nickname = "Plumber"; // specify both to support all devices // populate some fields var name = new ContactName(); name.givenName = "Jane"; name.familyName = "Doe"; contact.name = name; // save to device contact.save(onSuccess,onError); ### Esempio di clone // clone the contact object var clone = contact.clone(); clone.name.givenName = "John"; console.log("Original contact name = " + contact.name.givenName); console.log("Cloned contact name = " + clone.name.givenName); ### Rimuovere esempio function onSuccess() { alert("Removal Success"); }; function onError(contactError) { alert("Error = " + contactError.code); }; // remove the contact from the device contact.remove(onSuccess,onError); ### Stranezze di Android 2. x * **categorie**: non è supportato sui dispositivi Android 2. x, restituendo`null`. ### BlackBerry 10 capricci * **ID**: assegnate dal dispositivo quando si salva il contatto. ### Capricci di FirefoxOS * **categorie**: parzialmente supportati. Campi **pref** e **tipo** stanno tornando`null` * **IMS**: non supportato * **foto**: non supportato ### iOS stranezze * **displayName**: non supportata su iOS, tornando `null` se non c'è nessun `ContactName` specificato, nel qual caso restituisce il nome composito, **soprannome** o `""` , rispettivamente. * **compleanno**: deve essere inserito come un JavaScript `Date` oggetto, allo stesso modo viene restituito. * **foto**: restituisce un URL del File dell'immagine, che viene memorizzato nella directory temporanea dell'applicazione. Contenuto della directory temporanea vengono rimossi quando l'applicazione termina. * **categorie**: questa proprietà non è attualmente supportata, restituendo`null`. ### Windows Phone 7 e 8 stranezze * **displayName**: quando si crea un contatto, il valore specificato per il parametro del nome di visualizzazione è diverso dal nome visualizzato Estratto quando trovare il contatto. * **URL**: quando si crea un contatto, gli utenti possono inserire e salvare più di un indirizzo web, ma solo uno è disponibile durante la ricerca del contatto. * **phoneNumbers**: non è supportata l'opzione *pref* . Il *tipo* non è supportato in un'operazione di *trovare* . Un solo `phoneNumber` è consentita per ogni *tipo*. * **email**: non è supportata l'opzione *pref* . Home e personal fa riferimento la stessa voce di posta elettronica. È consentito un solo ingresso per ogni *tipo*. * **indirizzi**: supporta solo lavoro e casa/personali *tipo*. Il riferimento principale e personale *tipo* la stessa voce di indirizzo. È consentito un solo ingresso per ogni *tipo*. * **organizzazioni**: solo uno è consentito e non supporta gli attributi *pref*, *tipo*e *dipartimento* . * **Nota**: non supportato, restituendo`null`. * **IMS**: non supportato, restituendo`null`. * **compleanni**: non supportato, restituendo`null`. * **categorie**: non supportato, restituendo`null`. * **remove**: metodo non è supportato ### Stranezze di Windows * **foto**: restituisce un URL del File dell'immagine, che viene memorizzato nella directory temporanea dell'applicazione. * **compleanni**: non supportato, restituendo`null`. * **categorie**: non supportato, restituendo`null`. * **remove**: metodo è supportato solo in Windows 10 o superiore. ## ContactAddress L'oggetto `ContactAddress` memorizza le proprietà di un singolo indirizzo di un contatto. Un oggetto `Contact` può includere più di un indirizzo in una matrice `[] ContactAddress`. ### Proprietà * **pref**: impostare su `true` se questo `ContactAddress` contiene il valore dell'utente preferito. *(booleano)* * **tipo**: una stringa che indica il tipo di campo è, *casa* ad esempio. *(DOMString)* * **formattato**: indirizzo completo formattato per la visualizzazione. *(DOMString)* * **streetAddress**: l'indirizzo completo. *(DOMString)* * **località**: la città o località. *(DOMString)* * **regione**: lo stato o la regione. *(DOMString)* * **postalCode**: il codice postale o il codice postale. *(DOMString)* * **paese**: il nome del paese. *(DOMString)* ### Piattaforme supportate * Amazon fuoco OS * Android * BlackBerry 10 * Firefox OS * iOS * Windows Phone 7 e 8 * Windows 8 * Windows ### Esempio // display the address information for all contacts function onSuccess(contacts) { for (var i = 0; i < contacts.length; i++) { for (var j = 0; j < contacts[i].addresses.length; j++) { alert("Pref: " + contacts[i].addresses[j].pref + "\n" + "Type: " + contacts[i].addresses[j].type + "\n" + "Formatted: " + contacts[i].addresses[j].formatted + "\n" + "Street Address: " + contacts[i].addresses[j].streetAddress + "\n" + "Locality: " + contacts[i].addresses[j].locality + "\n" + "Region: " + contacts[i].addresses[j].region + "\n" + "Postal Code: " + contacts[i].addresses[j].postalCode + "\n" + "Country: " + contacts[i].addresses[j].country); } } }; function onError(contactError) { alert('onError!'); }; // find all contacts var options = new ContactFindOptions(); options.filter = ""; var filter = ["displayName", "addresses"]; navigator.contacts.find(filter, onSuccess, onError, options); ### Stranezze di Android 2. x * **pref**: non supportato, tornando `false` su dispositivi Android 2. x. ### BlackBerry 10 capricci * **pref**: non è supportato sui dispositivi BlackBerry, restituendo`false`. * **tipo**: parzialmente supportati. Solo uno di *lavoro* e *casa* tipo indirizzi può essere memorizzato per ciascun contatto. * **formattato**: parzialmente supportati. Restituisce una concatenazione di tutti i campi Indirizzo BlackBerry. * **streetAddress**: supportato. Restituisce una concatenazione di BlackBerry **Indirizzo1** e **Indirizzo2** campi indirizzo. * **località**: supportato. Memorizzato nel campo indirizzo **città** di BlackBerry. * **regione**: supportato. Memorizzato nel campo indirizzo di **stateProvince** BlackBerry. * **postalCode**: supportato. Memorizzato nel campo dell'indirizzo **zipPostal** BlackBerry. * **paese**: supportato. ### Capricci di FirefoxOS * **formattato**: attualmente non supportato ### iOS stranezze * **pref**: non è supportato sui dispositivi iOS, restituendo`false`. * **formattato**: attualmente non supportati. ### Stranezze di Windows 8 * **pref**: non supportato ### Stranezze di Windows * **pref**: non supportato ## ContactError L'oggetto `ContactError` viene restituito all'utente tramite la funzione di callback `contactError` quando si verifica un errore. ### Proprietà * **codice**: uno dei codici di errore predefiniti elencati di seguito. ### Costanti * `ContactError.UNKNOWN_ERROR` (code 0) * `ContactError.INVALID_ARGUMENT_ERROR` (code 1) * `ContactError.TIMEOUT_ERROR` (code 2) * `ContactError.PENDING_OPERATION_ERROR` (code 3) * `ContactError.IO_ERROR` (code 4) * `ContactError.NOT_SUPPORTED_ERROR` (code 5) * `ContactError.PERMISSION_DENIED_ERROR` (code 20) ## ContactField L'oggetto `ContactField` è un componente riutilizzabile che rappresenta Contatta campi genericamente. Ogni oggetto `ContactField` contiene una proprietà di `value`, `type` e `pref`. Un oggetto `Contact` memorizza diverse proprietà in matrici `[] ContactField`, come numeri di telefono e indirizzi email. Nella maggior parte dei casi, esistono pre-determinati valori per l'attributo `type` di un oggetto **ContactField**. Ad esempio, un numero di telefono può specificare valori di **type** di *casa*, *lavoro*, *mobile*, *iPhone* o qualsiasi altro valore che è supportato dal database dei contatti su una piattaforma particolare dispositivo. Tuttavia, per il campo di **photo** del `Contacto`, il campo **type** indica il formato dell'immagine restituita: **url** quando il **value** di attributo contiene un URL per l'immagine fotografica, o *base64*, quando il **value** contiene una stringa con codifica base64 immagine. ### Proprietà * **tipo**: una stringa che indica il tipo di campo è, *casa* ad esempio. *(DOMString)* * **valore**: il valore del campo, ad esempio un telefono numero o indirizzo e-mail. *(DOMString)* * **pref**: impostare su `true` se questo `ContactField` contiene il valore dell'utente preferito. *(booleano)* ### Piattaforme supportate * Amazon fuoco OS * Android * BlackBerry 10 * Firefox OS * iOS * Windows Phone 7 e 8 * Windows 8 * Windows ### Esempio // create a new contact var contact = navigator.contacts.create(); // store contact phone numbers in ContactField[] var phoneNumbers = []; phoneNumbers[0] = new ContactField('work', '212-555-1234', false); phoneNumbers[1] = new ContactField('mobile', '917-555-5432', true); // preferred number phoneNumbers[2] = new ContactField('home', '203-555-7890', false); contact.phoneNumbers = phoneNumbers; // save the contact contact.save(); ### Stranezze Android * **pref**: non supportato, restituendo`false`. ### BlackBerry 10 capricci * **tipo**: parzialmente supportati. Usato per i numeri di telefono. * **valore**: supportato. * **pref**: non supportato, restituendo`false`. ### iOS stranezze * **pref**: non supportato, restituendo`false`. ### Stranezze di Windows8 * **pref**: non supportato, restituendo`false`. ### Stranezze di Windows * **pref**: non supportato, restituendo`false`. ## ContactName Contiene diversi tipi di informazioni sul nome di un oggetto `Contact`. ### Proprietà * **formattato**: il nome completo del contatto. *(DOMString)* * **familyName**: cognome del contatto. *(DOMString)* * **givenName**: nome del contatto. *(DOMString)* * **middleName**: il nome del contatto medio. *(DOMString)* * **honorificPrefix**: prefisso del contatto (esempio *Mr* o *Dr*) *(DOMString)* * **honorificSuffix**: suffisso del contatto (esempio *Esq.*). *(DOMString)* ### Piattaforme supportate * Amazon fuoco OS * Android * BlackBerry 10 * Firefox OS * iOS * Windows Phone 7 e 8 * Windows 8 * Windows ### Esempio function onSuccess(contacts) { for (var i = 0; i < contacts.length; i++) { alert("Formatted: " + contacts[i].name.formatted + "\n" + "Family Name: " + contacts[i].name.familyName + "\n" + "Given Name: " + contacts[i].name.givenName + "\n" + "Middle Name: " + contacts[i].name.middleName + "\n" + "Suffix: " + contacts[i].name.honorificSuffix + "\n" + "Prefix: " + contacts[i].name.honorificSuffix); } }; function onError(contactError) { alert('onError!'); }; var options = new ContactFindOptions(); options.filter = ""; filter = ["displayName", "name"]; navigator.contacts.find(filter, onSuccess, onError, options); ### Stranezze Android * **formattato**: parzialmente supportati e di sola lettura. Restituisce una concatenazione di `honorificPrefix` , `givenName` , `middleName` , `familyName` , e`honorificSuffix`. ### BlackBerry 10 capricci * **formattato**: parzialmente supportati. Restituisce una concatenazione di campi **firstName** e **lastName** BlackBerry. * **familyName**: supportato. Archiviato in campo **lastName** BlackBerry. * **givenName**: supportato. Archiviato in campo **firstName** BlackBerry. * **middleName**: non supportato, restituendo`null`. * **honorificPrefix**: non supportato, restituendo`null`. * **honorificSuffix**: non supportato, restituendo`null`. ### Capricci di FirefoxOS * **formattato**: parzialmente supportati e di sola lettura. Restituisce una concatenazione di `honorificPrefix` , `givenName` , `middleName` , `familyName` , e`honorificSuffix`. ### iOS stranezze * **formattato**: parzialmente supportati. Restituisce il nome composito di iOS, ma è di sola lettura. ### Stranezze di Windows 8 * **formattato**: questo è l'unico nome proprietà ed è identico a `displayName` , e`nickname` * **familyName**: non supportato * **givenName**: non supportato * **middleName**: non supportato * **honorificPrefix**: non supportato * **honorificSuffix**: non supportato ### Stranezze di Windows * **formattato**: esso è identico al`displayName` ## ContactOrganization L'oggetto `ContactOrganization` memorizza la proprietà di organizzazione di un contatto. Un oggetto `Contact` memorizza uno o più oggetti `ContactOrganization` in una matrice. ### Proprietà * **pref**: impostare su `true` se questo `ContactOrganization` contiene il valore dell'utente preferito. *(booleano)* * **tipo**: una stringa che indica il tipo di campo è, *casa* ad esempio. _(DOMString) * **nome**: il nome dell'organizzazione. *(DOMString)* * **dipartimento**: contratto lavora per il dipartimento. *(DOMString)* * **titolo**: titolo del contatto presso l'organizzazione. *(DOMString)* ### Piattaforme supportate * Android * BlackBerry 10 * Firefox OS * iOS * Windows Phone 7 e 8 * Windows (solo dispositivi Windows 8.1 e 8.1 di Windows Phone) ### Esempio function onSuccess(contacts) { for (var i = 0; i < contacts.length; i++) { for (var j = 0; j < contacts[i].organizations.length; j++) { alert("Pref: " + contacts[i].organizations[j].pref + "\n" + "Type: " + contacts[i].organizations[j].type + "\n" + "Name: " + contacts[i].organizations[j].name + "\n" + "Department: " + contacts[i].organizations[j].department + "\n" + "Title: " + contacts[i].organizations[j].title); } } }; function onError(contactError) { alert('onError!'); }; var options = new ContactFindOptions(); options.filter = ""; filter = ["displayName", "organizations"]; navigator.contacts.find(filter, onSuccess, onError, options); ### Stranezze di Android 2. x * **pref**: non supportato dai dispositivi Android 2. x, restituendo`false`. ### BlackBerry 10 capricci * **pref**: non supportato dai dispositivi BlackBerry, restituendo`false`. * **tipo**: non supportato dai dispositivi BlackBerry, restituendo`null`. * **nome**: parzialmente supportati. Il primo nome dell'organizzazione è memorizzato nel campo **azienda** BlackBerry. * **dipartimento**: non supportato, restituendo`null`. * **titolo**: parzialmente supportati. Il primo titolo di organizzazione è memorizzato nel campo **jobTitle** BlackBerry. ### Firefox OS stranezze * **pref**: non supportato * **tipo**: non supportato * **dipartimento**: non supportato * Campi **nome** e **titolo** memorizzato in **org** e **jobTitle**. ### iOS stranezze * **pref**: non è supportato sui dispositivi iOS, restituendo`false`. * **tipo**: non è supportato sui dispositivi iOS, restituendo`null`. * **nome**: parzialmente supportati. Il primo nome dell'organizzazione è memorizzato nel campo **kABPersonOrganizationProperty** iOS. * **dipartimento**: parzialmente supportati. Il primo nome del dipartimento è memorizzato nel campo **kABPersonDepartmentProperty** iOS. * **titolo**: parzialmente supportati. Il primo titolo è memorizzato nel campo **kABPersonJobTitleProperty** iOS. ### Stranezze di Windows * **pref**: non supportato, restituendo`false`. * **tipo**: non supportato, restituendo`null`.