Esquemas de URI personalizados para Facebook Messenger

Dado el reciente ” aliento ” de Facebook para migrar a una aplicación de mensajería por separado, y como seguimiento a la {muy informativa} respuesta a la pregunta sobre los esquemas de URL / URI compatibles con la aplicación de Facebook , me he estado preguntando si la información sobre el protocolo personalizado de la aplicación Facebook messenger de fb-messenger:// está disponible.

La funcionalidad que estaba buscando era la capacidad de hacer clic en un botón que abriría una ventana de chat de FB-messenger con el usuario cuyo ID numérico de Facebook se conoce. Esto también debe funcionar si la aplicación de Facebook ( katana ) no está instalada en el dispositivo (es decir, solo el messenger, orca ).

Encontré un ejemplo del enlace profundo deseado ( fb-messenger://user-thread/{user-id} ), pero eso no pareció funcionar. Me di cuenta de que FB tiene la tendencia de revisar los URI de vez en cuando, ya que generalmente no se supone que estén disponibles para el público (por lo que yo entiendo).

Después de buscar infructuosamente esta información, he decidido hacer mi propia lista. A continuación se muestra lo que logré recostackr hasta ahora, junto con algunas explicaciones:

Esto se actualiza para la versión 141.0.0.25.76 (21 de octubre de 2017) .

 fb-messenger://accounts fb-messenger://active_now fb-messenger://addcard fb-messenger://addmembers fb-messenger://android_date_time fb-messenger://android_storage fb-messenger://autocompose fb-messenger://autocompose_payment fb-messenger://bots/get_started/?page_id=%s&cta_id=%s fb-messenger://business fb-messenger://business/ fb-messenger://business_extensions fb-messenger://buy/mc?item_id={#%s} fb-messenger://callsearch fb-messenger://commerce/ fb-messenger://compose fb-messenger://contactmigration fb-messenger://contacts fb-messenger://contacts/add_contacts fb-messenger://contactuploadoptin fb-messenger://direct_share fb-messenger://drawoverotherapps fb-messenger://games fb-messenger://groupcompose fb-messenger://groupstab fb-messenger://groupthreadfbid/ fb-messenger://groupthreadfbid/%s fb-messenger://ig_contact_import fb-messenger://installupdate fb-messenger://instant_article/?article_id= fb-messenger://instant_article/?article_id=%s fb-messenger://invite fb-messenger://join_request fb-messenger://mai fb-messenger://messagerequests fb-messenger://messagesearch fb-messenger://montage fb-messenger://montage_composer fb-messenger://montage_mediapicker fb-messenger://montageaudiencepicker fb-messenger://montagecomposer fb-messenger://networkempathy fb-messenger://new fb-messenger://newuser/ fb-messenger://newuser/signup?provider_name=%s&provider_page_fbid=%s fb-messenger://nfc fb-messenger://omni_m fb-messenger://opengrouppreview fb-messenger://opengrouppreview?group_preview_hash= fb-messenger://optimistic fb-messenger://optimistic/%s fb-messenger://payments fb-messenger://payments/ fb-messenger://platform fb-messenger://platform/cta/postback/?cta_id=%s fb-messenger://platform/share/?cta_id=%s fb-messenger://ride_map/{%s} fb-messenger://roomcompose fb-messenger://rtccall fb-messenger://sampleflows fb-messenger://settings fb-messenger://settings/datasaver fb-messenger://settings/messengeronlybackup fb-messenger://settings/montage fb-messenger://settings/notifications fb-messenger://settings/people fb-messenger://settings/phoneevents fb-messenger://settings/profilepicture fb-messenger://settings/tincan fb-messenger://share < Used for sharing multimedia, contains several extras. See more info below. fb-messenger://sms fb-messenger://sms/ fb-messenger://sms/%s fb-messenger://sms-bridge fb-messenger://sms-takeover fb-messenger://sms-takeover/nux?context=%s fb-messenger://sms-takeover/nux?context=%s&thread_id=%s fb-messenger://sms-takeover/sms_anonymous_chat_head fb-messenger://stickerstore fb-messenger://thread/ < Deprecated fb-messenger://threadkeystring fb-messenger://threads fb-messenger://threadsettings fb-messenger://user fb-messenger://user/ fb-messenger://user/%s < Opens chathead/conversation with user %s, where %s is the numeric fb user id. Using a username string here crashes the orca app. fb-messenger://user/%s?ref=%s&ref_source=%s fb-messenger://verifyphonenux fb-messenger://voip fb-messenger://wave 

Aquí hay algunos esquemas de URI cuyo propósito en esta aplicación no conozco:

  • fb:// - ver posibles URI de este esquema aquí .
  • fb-work://
  • fbinternal://
  • fb-messenger-secure://
  • dialtone://

La investigación de fb-messenger://share (de la versión anterior de esta publicación puede no ser válida ):

  • Tiene un StringExtra llamado ShareType que puede ser: ShareType.invite , ShareType.forward , ShareType.regular .
  • Tiene un StringExtra opcional (?) StringExtra ShareType.invitedUser .
  • Tiene un StringExtra opcional (?) StringExtra ShareType.invitedUserDisplayName .
  • Tiene un StringExtra opcional (?) StringExtra ShareType.inviteEntryPoint .
  • Tiene un StringExtra opcional (?) StringExtra ShareType.invitesSentBroadcastAction .
  • (varios otros)

En el caso de ShareType.forward :

  • Tiene un Extra con la etiqueta "attachment" O "message" .
  • Tiene un Extra con la etiqueta "trigger" .

Campos Extra de una acción compartida (etiqueta: tipo ):

  • android.intent.extra.TEXT : String
  • attachment : Parcelable
  • message : Parcelable
  • page_name : String
  • page_post_id : String
  • page_target : Long
  • send_as_message_entry_point : String
  • share_attachment_url : String
  • share_caption : String
  • share_description : String
  • share_fbid : String
  • share_link_url : String
  • share_media_url : String
  • share_return_to_fb4a : Boolean
  • share_robotext : String
  • share_story_url : String
  • share_title : String
  • ShareType : String
  • target_recipients : StringArray
  • title : Cadena
  • trigger : cadena

La funcionalidad requerida se puede lograr mediante el uso de fb-messenger://user/{user-id} lugar de fb-messenger://user-thread/{user-id} .

Tenga en cuenta que {user-id} es la ID numérica global del usuario (por ejemplo, para Zuck es 4 ), que se puede obtener (a partir de noviembre de 2015) analizando el documento html que corresponde al nombre de usuario de la persona (por ejemplo, para Zuck es https://www.facebook.com/zuck ) y extraer el "entity_id" que se encuentra dentro.

De acuerdo con mi última prueba, los ID de usuario con scope de la aplicación , que generalmente son los ID disponibles para los desarrolladores, ¡no funcionan para esto!

A continuación se muestra un script de python3 que extrae la ID global de un nombre de usuario conocido (crédito: Paul Schreiber ):

 #!/usr/bin/python import requests import re url = 'https://www.facebook.com/zuck' idre = re.compile('"entity_id":"([0-9]+)"') page = requests.get(url) print(idre.findall(page.content.decode())) 

Alternativamente, este sitio puede usarse para lograr lo mismo.

Tenga en cuenta que este método no es oficialmente compatible e incluso FB puede prohibir su aplicación .

Esto simplemente comparte un enlace

  

Usar intenciones de Chrome para Android: el código siguiente abre FB Messenger si está instalado. Else redirige a la URL alternativa.

  Open Messenger 

Con la versión actual, Facebook en Android solicita automáticamente al usuario que abra la aplicación o abre en Chrome cuando usa su dominio http://www.messenger.com. Es mejor simplemente redirigir al usuario a esta url y dejar que Facebook lo maneje

https://www.messenger.com/t/ {username-or-page-name-here}

 Intent intent; intent = new Intent(Intent.ACTION_VIEW, Uri.parse("https://www.messenger.com/t/{username-or-page-name-here}")); startActivity(intent);