¿Por qué no puedo sincronizar contactos con cuentas de Twitter/Facebook en Jelly Bean 4.1.1?

Con mi Samsung Galaxy Nexus no puedo sincronizar mis contactos (de Contactos de Google) con los de Twitter/Facebook.

Mis cuentas están activas y funcionando, pero cuando toco "Sincronizar ahora", no sucede nada. Dice "Última sincronización el..." pero los contactos no están actualizados.

¿Me estoy perdiendo algo?

Respuestas (1)

Porque Google lo deshabilitó por razones de marketing (¿empujando a Google+ tal vez?) Técnicamente, no está en la lista blanca en un archivo xml para permitir la sincronización.

Según niranjanthilak aquí está su explicación detallada:

  • La aplicación de Facebook puede sincronizar sus contactos con los contactos (a través de ContactsProvider) solo cuando está en la lista blanca (o, en otras palabras, se le otorga un conjunto de permisos escalados) en la ROM.

  • Para esto, debe editar ContactsProvider.apk y agregar el permiso de la lista blanca.

  • Para editar ContactsProvider.apk (que reside en el directorio /system/app/), necesitará smali (un ensamblador/desensamblador para el formato dex de Android).
  • Después de desensamblar ContactsProvider.apk usando smali, vaya a la carpeta res/values/ (en la fuente desensamblada) y agregue el archivo (arrays.xml) que contiene el siguiente contenido:
<?xml version="1.0" encoding="UTF-8"?>
<resources>
    <string-array name="unrestricted_packages">
        <item>com.facebook.katana</item>
    </string-array>
</resources>
  • El com.facebook.katana es la aplicación de facebook. Entonces, después de agregar el archivo arrays.xml a la carpeta /res/values/, ensamble ContactsProvider usando smali en un archivo apk sin firmar.
  • Ahora, desde ICS, Android 4.0, Google ha deshabilitado esta provisión de aplicaciones de lista blanca de forma nativa, por lo tanto, han ofuscado ciertos campos de la base de datos.
  • Agregue la columna nombrada
is_restricted

a la tabla raw_contacts dentro de contactos2.db (almacenada en /data/data/com.android.providers.contacts/database/) - Si tiene habilitado sqlite (junto con busybox) en su kernel, puede usar este comando para modificar la base de datos y agregando el campo necesario ejecutándolo bajo ADB Shell:

sqlite3 /data/data/com.android.providers.contacts/databases/contacts2.db
 'ALTER TABLE raw_contacts ADD COLUMN is_restricted VARCHAR';
  • Después de agregar la columna, todas las cuentas de Facebook agregadas recibirán un mensaje de sincronización y aparecerán en los contactos.
Gracias. El único problema con el cajero automático es que no soy root, así que esto no funcionará :(