Android
Users
Android-App: Facebook-Loginintegration mit Parse
21 min
so fügen sie die facebook anmeldung zu ihrer android app hinzu einführung in diesem leitfaden lernen sie, wie sie sich mit facebook login und parse user parse user klasse über back4app anmelden dieses tutorial verwendet eine einfache app, die in android studio 4 1 1 mit buildtoolsversion=30 0 3 buildtoolsversion=30 0 3 , compile sdk version = 30 compile sdk version = 30 und targetsdkversion 30 targetsdkversion 30 jederzeit können sie auf das vollständige android projekt zugreifen, das mit diesem tutorial in unseren github repositories erstellt wurde kotlin beispiel repository java beispiel repository ziel erstellen sie eine facebook anmeldefunktion für ihre android app mit parse und back4app voraussetzungen um dieses tutorial abzuschließen, benötigen wir android studio eine app, die auf back4app erstellt wurde hinweis befolgen sie das tutorial für neue parse apps , um zu lernen, wie man eine parse app auf back4app erstellt eine android app, die mit back4app verbunden ist hinweis befolgen sie das tutorial zur installation des parse sdk , um ein android studio projekt zu erstellen, das mit back4app verbunden ist ein gerät (oder virtuelles gerät ) mit android 4 1 (jelly bean) oder neuer 1 facebook einrichten um facebook funktionen zu nutzen, müssen sie gehen sie zur facebook entwickler website und erstellen sie ein konto und eine app befolgen sie den schnellstartleitfaden von facebook, indem sie hier klicken und achten sie auf die folgenden empfehlungen hier sind die schritte, die im quickstart guide von facebook enthalten sind, die sie sorgfältig befolgen müssen, da sie sie nicht genau so befolgen werden, wie facebook vorschlägt in schritt 3 anstelle von hinzufügen in der dependencies{} dependencies{} sektion bei build gradle (modul\ app) build gradle (modul\ app) , fügen sie den folgenden code in die dependencies{} dependencies{} sektion bei build gradle (modul\ app) build gradle (modul\ app) denken sie daran, die version des parse facebook utils sdk für android auf die neueste zu aktualisieren sie können herausfinden, welche die neueste version ist, auf der jitpack website , indem sie diese schritte befolgen fügen sie auf der jitpack website parse community\ parsefacebookutils android parse community\ parsefacebookutils android in das git repo url git repo url feld ein nachdem sie das getan haben, klicken sie auf den nachschlagen nachschlagen button dann sollten sie die verfügbaren versionen des parse sdk für android sehen, wie im folgenden bild gezeigt in schritt 4 werden sie aufgefordert, die internetberechtigung im anwendungs anwendungs element in /app/manifest/androidmanifest xml /app/manifest/androidmanifest xml datei hinzuzufügen, aber sie haben dies bereits getan, während sie dem installieren sie das parse sdk tutorial gefolgt sind, sodass sie dies nicht tun müssen in schritt 6 müssen sie schlüssel hashes bereitstellen, daher müssen sie open ssl installiert haben facebooks anleitung bietet keine befehlszeilen zum generieren von schlüssel hashes in linux, aber das ist einfach, da sie nur ein terminalfenster öffnen und den folgenden befehl ausführen müssen folgen sie nicht den schritten des quickstart leitfadens von facebook direkt nach schritt 6 was ist sha 1 (sichere hash algorithmus) sha 1, auch bekannt als der sichere hash algorithmus, ist der gebräuchlichste verschlüsselungsalgorithmus sha 1 wurde von der national security agency der vereinigten staaten entworfen der sha 1 fingerabdruck ist ein einzigartiger schlüssel, der für ihren pc generiert wird und zum signieren verwendet werden kann er wird hauptsächlich für die einreichung bei der nutzung einiger apis (wie der facebook api, die wir in diesem leitfaden verwenden werden) verwendet wenn sie mehr details erfahren möchten, können sie die sha 1 wikipedia seite besuchen sie sollten die anderen schritte befolgen, die im facebook quickstart leitfaden beschrieben sind und hier nicht erwähnt werden 2 verknüpfen sie ihre facebook app mit back4app gehen sie zu ihrem app dashboard unter back4app website und klicken sie auf servereinstellungen servereinstellungen suchen sie den block „facebook login“ und klicken sie auf einstellungen einstellungen der block „facebook login“ sieht so aus 3\ wir müssen unsere facebook id hinzufügen, die wir aus dem facebook leitfaden in string xml erhalten haben (sie sollten dem facebook leitfaden gefolgt sein und dies vorher gemacht haben) gehen sie zu ihrem android studio projekt, öffnen sie ihre strings datei /app/src/main/res/values/strings xml /app/src/main/res/values/strings xml , kopieren sie ihre facebook app id facebook app id und fügen sie sie in das facebook appid facebook appid feld der letzten seite von back4app ein, die sie geöffnet haben drücken sie schließlich die + + taste 3 fügen sie das provider element in die manifest datei ein gehen sie zurück zu ihrem android studio projekt und fügen sie im application application element in der /app/manifest/androidmanifest xml /app/manifest/androidmanifest xml datei direkt nach dem meta data meta data element den folgenden code hinzu 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" /> vergiss nicht, deine facebook app id im obigen code einzufügen 4 initialisiere parse facebook util sdks in deinem android studio projekt, in der java datei namens app app die von application erweitert wird, die du erstellt hast, um das parse sdk zu initialisieren, direkt nach der oncreate oncreate methode, gleich nach dem parse initialize() parse initialize() aufruf, verwende den folgenden code, um das parse facebook utils sdk zu initialisieren wenn du keine app java app java datei hast, wie in diesem schritt beschrieben, greife auf die installiere das parse sdk für android https //www back4app com/docs/android/parse android sdk dokumentation zu und stelle sicher, dass du alle erforderlichen schritte zur korrekten installation des parse sdk befolgt hast wenn du das parse sdk nicht richtig installierst, wird dein facebook login mit parse nicht funktionieren 5 einrichten zu beginn jeder parse aktivität importieren sie folgendes 6 einloggen um ihre login aktivität zu implementieren, tun sie folgendes importieren sie in ihre loginactivity loginactivity , zusätzlich zu den abhängigkeiten, die in schritt 4 2\ um facebook login zu implementieren, verwenden sie einfach den folgenden code 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 } im beispielprojekt befindet sich dieser code innerhalb eines login via facebook login via facebook schaltflächen callbacks 3\ nach einem erfolgreichen login über facebook in unsere app können wir nun einige grundlegende informationen über den angemeldeten benutzer abrufen wie sie sehen können, sind im obigen code viele weitere methoden enthalten die getuserdetailfromfb getuserdetailfromfb methode ist dafür verantwortlich, benutzerdetails abzurufen hier ist der code für diese methode 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 ist interessant, eine methode hinzuzufügen, um alert dialoge anzuzeigen und den prozess professioneller erscheinen zu lassen in dieser funktion erhalten wir auch einen benutzerparameter wenn wir zur mainactivity seite gehen, senden wir diesen benutzerparameter im intent, und in der mainactivity ziehen wir die informationen in diesem benutzer und drucken sie auf dem bildschirm aus die folgende methode tut dies 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\ wenn sie einen vorhandenen parseuser mit einem facebook konto verknüpfen möchten, können sie dies wie folgt tun 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 } im beispielprojekt befindet sich dieser code innerhalb eines verbinden sie ihr konto mit facebook verbinden sie ihr konto mit facebook schaltflächen callbacks 6\ wenn sie facebook von einem benutzer trennen möchten, tun sie einfach folgendes 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 } im beispielprojekt befindet sich dieser code innerhalb eines trennen sie ihr konto von facebook trennen sie ihr konto von facebook schaltflächen callbacks 7\ es ist sehr wichtig , die folgende methode außerhalb der oncreate() oncreate() methode ihrer loginactivity loginactivity zu verwenden, um die anmeldeergebnisse über callbackmanager an den loginmanager zu übergeben und fehler zu vermeiden 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 abmelden um facebook logout zu implementieren, verwenden sie einfach den unten genannten code 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 } im beispielprojekt befindet sich dieser code innerhalb eines log out log out button callbacks die methode alertdisplayer alertdisplayer ist dieselbe, die sie in der loginactivity loginactivity , vergessen sie nicht, ihre intent intent argumente zu ändern es ist erledigt! in diesem stadium können sie sich mit facebook in ihre app einloggen, registrieren und abmelden, indem sie die kernfunktionen von parse server über back4app nutzen!