Android
Users
Implementar inicio de sesión de Facebook en Android con Parse
21 min
cómo agregar el inicio de sesión de facebook a tu aplicación de android introducción en esta guía, aprenderás cómo iniciar sesión utilizando el inicio de sesión de facebook y parse user parse user a través de back4app este tutorial utiliza una aplicación básica creada en android studio 4 1 1 con buildtoolsversion=30 0 3 buildtoolsversion=30 0 3 , compile sdk version = 30 compile sdk version = 30 y targetsdkversion 30 targetsdkversion 30 en cualquier momento, puedes acceder al proyecto completo de android construido con este tutorial en nuestros repositorios de github repositorio de ejemplo en kotlin repositorio de ejemplo en java objetivo crea una función de inicio de sesión con facebook para tu aplicación de android utilizando parse y back4app requisitos previos para completar este tutorial, necesitamos android studio una aplicación creada en back4app nota sigue el tutorial de nueva aplicación parse para aprender cómo crear una aplicación parse en back4app una aplicación de android conectada a back4app nota sigue el tutorial de instalación del sdk de parse para crear un proyecto de android studio conectado a back4app un dispositivo (o dispositivo virtual ) que ejecute android 4 1 (jelly bean) o más reciente 1 configuración de facebook para comenzar a usar las funciones de facebook, necesitas ir al sitio web de desarrolladores de facebook y crear una cuenta y una aplicación sigue la guía de inicio rápido de facebook haciendo clic aquí y presta atención a las siguientes recomendaciones aquí están los pasos incluidos en la guía de inicio rápido de facebook, que debes seguir cuidadosamente, ya que no los seguirás exactamente como facebook sugiere en el paso 3 en lugar de agregar en el dependencies{} dependencies{} sección en build gradle (módulo\ app) build gradle (módulo\ app) , agrega el siguiente código en el dependencies{} dependencies{} sección en build gradle (módulo\ app) build gradle (módulo\ app) recuerda actualizar la versión de parse facebook utils sdk para android a la más reciente puedes averiguar cuál es la última versión en el sitio web de jitpack , siguiendo estos pasos en el sitio web de jitpack, pega parse community\ parsefacebookutils android parse community\ parsefacebookutils android en el url del repositorio git url del repositorio git caja después de hacer eso, haz clic en el buscar buscar botón luego deberías ver las versiones disponibles de parse sdk para android, como se muestra en la siguiente imagen en el paso 4, se te pedirá que agregues permiso de internet en el aplicación aplicación elemento en /app/manifest/androidmanifest xml /app/manifest/androidmanifest xml archivo, pero ya lo has agregado mientras seguías el tutorial de instalación de parse sdk así que no necesitas hacer esto en el paso 6, necesitarás proporcionar hashes clave, así que debes tener open ssl instalado la guía de facebook no proporciona líneas de comando para generar hashes clave en linux, pero hacerlo es simple, ya que todo lo que requiere de ti es abrir una ventana de terminal y ejecutar el siguiente comando no sigas los pasos de la guía de inicio rápido de facebook justo después de paso 6 ¿qué es sha 1? (algoritmo de hash seguro) sha 1, llamado el algoritmo de hash seguro, es el algoritmo de encriptación más común sha 1, diseñado por la agencia de seguridad nacional de los estados unidos la huella digital sha 1 es una clave única generada para tu pc que puede ser utilizada para firmar se utiliza principalmente para enviar solicitudes a algunas apis (como la api de facebook que utilizaremos en esta guía) si deseas aprender más detalles, puedes visitar la página de wikipedia de sha 1 deberías seguir los otros pasos descritos en la guía de inicio rápido de facebook y que no se mencionan aquí 2 vincula tu aplicación de facebook con back4app ve a tu panel de control de la aplicación en sitio web de back4app y haz clic en configuración del servidor configuración del servidor encuentra el bloque “inicio de sesión de facebook” y haz clic en configuración configuración el bloque “inicio de sesión de facebook” se ve así 3\ necesitamos agregar nuestro facebook id, que obtuvimos de la guía de facebook a string xml (deberías haber seguido la guía de facebook y haber hecho esto antes) ve a tu proyecto de android studio, abre tu archivo de cadenas /app/src/main/res/values/strings xml /app/src/main/res/values/strings xml , copia tu facebook app id facebook app id y pégalo en el appid de facebook appid de facebook campo de la última página de back4app que abriste por último, presiona el botón + + 3 agrega el elemento provider en el archivo manifest regresa a tu proyecto de android studio y dentro del aplicación aplicación elemento en /app/manifest/androidmanifest xml /app/manifest/androidmanifest xml archivo, justo después del meta data meta data elemento, agrega el siguiente código 1 \<provider 2 android\ name="com facebook facebookcontentprovider" 3 \<! don't forget to put your facebook app id in the following link > 4 android\ authorities="com facebook app facebookcontentprovideryour facebook app id" 5 android\ exported="true" /> no olvides poner tu id de app de facebook en el código anterior 4 inicializar parse facebook util sdks en tu proyecto de android studio, en el archivo java llamado app app que extiende application que creaste para inicializar el sdk de parse, en su oncreate oncreate método, justo después de parse initialize() parse initialize() llama, usa el siguiente código para inicializar el sdk de utilidades de facebook de parse si no tienes un app java app java archivo como se describe en este paso, accede a la instalar sdk de parse para android https //www back4app com/docs/android/parse android sdk documentación y asegúrate de haber seguido todos los pasos requeridos para instalar correctamente el sdk de parse si no instalas el sdk de parse correctamente, tu inicio de sesión de facebook con parse no funcionará 5 configurar al comienzo de cada actividad de parse, importa lo siguiente 6 iniciar sesión para implementar tu actividad de inicio de sesión, haz lo siguiente importar en tu loginactivity loginactivity , además de las dependencias importadas en paso 4 2\ para implementar el inicio de sesión de facebook, simplemente usa el siguiente código 1 final progressdialog dialog = new progressdialog(this); 2 dialog settitle("please, wait a moment "); 3 dialog setmessage("logging in "); 4 dialog show(); 5 collection\<string> permissions = arrays aslist("public profile", "email"); 6 parsefacebookutils loginwithreadpermissionsinbackground(this, permissions, (user, err) > { 7 dialog dismiss(); 8 if (err != null) { 9 log e("facebookloginexample", "done ", err); 10 toast maketext(this, err getmessage(), toast length long) show(); 11 } else if (user == null) { 12 toast maketext(this, "the user cancelled the facebook login ", toast length long) show(); 13 log d("facebookloginexample", "uh oh the user cancelled the facebook login "); 14 } else if (user isnew()) { 15 toast maketext(this, "user signed up and logged in through facebook ", toast length long) show(); 16 log d("facebookloginexample", "user signed up and logged in through facebook!"); 17 getuserdetailfromfb(); 18 } else { 19 toast maketext(this, "user logged in through facebook ", toast length long) show(); 20 log d("facebookloginexample", "user logged in through facebook!"); 21 showalert("oh, you!", "welcome back!"); 22 } 23 });1 val dlg = progressdialog(this) 2 dlg settitle("please, wait a moment ") 3 dlg setmessage("logging in ") 4 dlg show() 5 val permissions collection\<string> = listof("public profile", "email") 6 parsefacebookutils loginwithreadpermissionsinbackground(this, permissions) { user parseuser?, err parseexception? > 7 dlg dismiss() 8 when { 9 err != null > { 10 log e("facebookloginexample", "done ", err) 11 toast maketext(this, err message, toast length long) show() 12 } 13 user == null > { 14 toast maketext(this, "the user cancelled the facebook login ", toast length long) show() 15 log d("facebookloginexample", "uh oh the user cancelled the facebook login ") 16 } 17 user isnew > { 18 toast maketext(this, "user signed up and logged in through facebook ", toast length long) show() 19 log d("facebookloginexample", "user signed up and logged in through facebook!") 20 getuserdetailfromfb() 21 } 22 else > { 23 toast maketext(this, "user logged in through facebook ", toast length long) show() 24 log d("facebookloginexample", "user logged in through facebook!") 25 showalert("oh, you!", "welcome back!") 26 } 27 } 28 } en el proyecto de ejemplo, este código se coloca dentro de un inicio de sesión a través de facebook inicio de sesión a través de facebook callback 3\ después de un inicio de sesión exitoso a través de facebook en nuestra aplicación, ahora podemos obtener información básica del usuario registrado como puedes ver, hay muchos más métodos incluidos en el código anterior el getuserdetailfromfb getuserdetailfromfb método es responsable de obtener los detalles del usuario aquí está el código para este método 1 private void getuserdetailfromfb() { 2 graphrequest request = graphrequest newmerequest(accesstoken getcurrentaccesstoken(), (object, response) > { 3 parseuser user = parseuser getcurrentuser(); 4 try { 5 if (object has("name")) 6 user setusername(object getstring("name")); 7 if (object has("email")) 8 user setemail(object getstring("email")); 9 } catch (jsonexception e) { 10 e printstacktrace(); 11 } 12 user saveinbackground(e > { 13 if (e == null) { 14 showalert("first time login!", "welcome!"); 15 } else 16 showalert("error", e getmessage()); 17 }); 18 }); 19 20 bundle parameters = new bundle(); 21 parameters putstring("fields", "name,email"); 22 request setparameters(parameters); 23 request executeasync(); 24 }1 private fun getuserdetailfromfb() { 2 val request = 3 graphrequest newmerequest(accesstoken getcurrentaccesstoken()) { `object` jsonobject, graphresponse? > 4 val user = parseuser getcurrentuser() 5 try { 6 user username = `object` getstring("name") 7 } catch (e jsonexception) { 8 e printstacktrace() 9 } 10 try { 11 user email = `object` getstring("email") 12 } catch (e jsonexception) { 13 e printstacktrace() 14 } 15 user saveinbackground { 16 if (it == null) 17 showalert("first time login!", "welcome!") 18 else 19 showalert("error", it message) 20 } 21 } 22 val parameters = bundle() 23 parameters putstring("fields", "name,email") 24 request parameters = parameters 25 request executeasync() 26 } 4\ es interesante agregar un método para mostrar diálogos de alerta y hacer que el proceso se vea más profesional en esta función, también obtenemos un parámetro de usuario al ir a la página mainactivity, enviamos este parámetro de usuario en la intención, y en mainactivity, extraemos la información de este usuario y la imprimimos en la pantalla el método a continuación hace esto 1 private void showalert(string title, string message) { 2 alertdialog builder builder = new alertdialog builder(this) 3 settitle(title) 4 setmessage(message) 5 setpositivebutton("ok", (dialog, which) > { 6 dialog cancel(); 7 intent intent = new intent(this, mainactivity class); 8 intent addflags(intent flag activity clear task | intent flag activity new task); 9 startactivity(intent); 10 }); 11 alertdialog ok = builder create(); 12 ok show(); 13 }1 private fun showalert(title string, message string?) { 2 val builder = alertdialog builder(this) 3 settitle(title) 4 setmessage(message) 5 setpositivebutton("ok") { dialog dialoginterface, which int > 6 dialog cancel() 7 val intent = intent(this\@loginactivity, mainactivity class java) 8 intent addflags(intent flag activity clear task or intent flag activity new task) 9 startactivity(intent) 10 } 11 val ok = builder create() 12 ok show() 13 } 5\ si deseas asociar un parseuser existente a una cuenta de facebook, puedes vincularlo así 1 collection\<string> permissions = arrays aslist("public profile", "email"); 2 if (!parsefacebookutils islinked(parseuser getcurrentuser())) { 3 parsefacebookutils linkwithreadpermissionsinbackground(parseuser getcurrentuser(), this, permissions, ex > { 4 if (parsefacebookutils islinked(parseuser getcurrentuser())) { 5 toast maketext(this, "woohoo, user logged in with facebook ", toast length long) show(); 6 log d("facebookloginexample", "woohoo, user logged in with facebook!"); 7 } 8 }); 9 } else { 10 toast maketext(this, "you have already linked your account with facebook ", toast length long) show(); 11 }1 val permissions= listof("public profile","email") 2 if (!parsefacebookutils islinked(parseuser getcurrentuser())){ 3 parsefacebookutils linkwithreadpermissionsinbackground(parseuser getcurrentuser(),this,permissions) { 4 if (parsefacebookutils islinked(parseuser getcurrentuser())){ 5 toast maketext(this, "woohoo, user logged in with facebook ", toast length long) show() 6 log d("facebookloginexample", "woohoo, user logged in with facebook!") 7 } 8 } 9 } else { 10 toast maketext(this, "you have already linked your account with facebook ", toast length long) show() 11 } 12 } en el proyecto de ejemplo, este código se coloca dentro de un vincula tu cuenta a facebook vincula tu cuenta a facebook callback 6\ si deseas desvincular facebook de un usuario, simplemente haz esto 1 parsefacebookutils unlinkinbackground(parseuser getcurrentuser(), ex > { 2 if (ex == null) { 3 toast maketext(this, "the user is no longer associated with their facebook account ", toast length long) show(); 4 log d("myapp", "the user is no longer associated with their facebook account "); 5 } else { 6 toast maketext(this, ex getmessage(), toast length long) show(); 7 } 8 });1 parsefacebookutils unlinkinbackground(parseuser getcurrentuser()) { 2 if (it == null) { 3 toast maketext(this,"the user is no longer associated with their facebook account ",toast length long) show() 4 log d("myapp", "the user is no longer associated with their facebook account ") 5 } else { 6 toast maketext(this, it message, toast length long) show() 7 } 8 } en el proyecto de ejemplo, este código se coloca dentro de un desvincula tu cuenta de facebook desvincula tu cuenta de facebook callback 7\ es muy importante usar lo siguiente como un método fuera del oncreate() oncreate() método de tu loginactivity loginactivity para pasar los resultados de inicio de sesión al loginmanager a través de callbackmanager y evitar errores 1 @override 2 protected void onactivityresult(int requestcode, int resultcode, intent data) { 3 super onactivityresult(requestcode, resultcode, data); 4 parsefacebookutils onactivityresult(requestcode, resultcode, data); 5 }1 override fun onactivityresult(requestcode int, resultcode int, data intent?) { 2 super onactivityresult(requestcode, resultcode, data) 3 parsefacebookutils onactivityresult(requestcode, resultcode, data) 4 } 7 cerrar sesión para implementar el cierre de sesión de facebook, simplemente usa el código mencionado a continuación 1 final progressdialog dialog = new progressdialog(this); 2 dialog settitle("please, wait a moment "); 3 dialog setmessage("logging out "); 4 dialog show(); 5 loginmanager getinstance() logout(); 6 parseuser logoutinbackground(e > { 7 if (e == null) 8 showalert("so, you're going ", "ok bye bye then", true); 9 else 10 showalert("error ", e getmessage(), false); 11 });1 val dlg = progressdialog(this) 2 dlg settitle("please, wait a moment ") 3 dlg setmessage("logging out ") 4 dlg show() 5 loginmanager getinstance() logout() 6 parseuser logoutinbackground { e > 7 if (e == null) 8 showalert("so, you're going ", "ok bye bye then", true) 9 else 10 showalert("error ", e message, false) 11 } en el proyecto de ejemplo, este código se coloca dentro de un cerrar sesión cerrar sesión callback de botón el método alertdisplayer alertdisplayer es el mismo que agregaste en el loginactivity loginactivity , no olvides cambiar sus argumentos de intent argumentos de intent ¡está hecho! en esta etapa, puedes iniciar sesión, registrarte y cerrar sesión de tu aplicación con facebook utilizando las características principales de parse server a través de back4app!