Android Facebook SDK 4.X, wie man E-Mail-Adresse und Facebook Access Token erhalten, um es an Web Service weiterzugeben

EDIT: Meine Frage ist, wie man E-Mail, UserId, Facebook Authentifizierung mit Facebook SDK 4.X, in diesem Moment, mit Ming Respond, ich weiß, wie kann ich E-Mail, Benutzer-ID, so meine Frage ist, wie man Facebook-Authentifizierung seit bekommen bekommen Session und GraphUser wurde gerade durch LoginManager und AccessToken ersetzt und es gibt keine Informationen darüber?

import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.util.Log; import com.facebook.AccessToken; import com.facebook.AccessTokenTracker; import com.facebook.CallbackManager; import com.facebook.FacebookCallback; import com.facebook.FacebookException; import com.facebook.Profile; import com.facebook.ProfileTracker; import com.facebook.login.LoginResult; import com.facebook.login.widget.LoginButton; import java.util.Arrays; public class RegisterActivity extends Activity { private String fbUserID; private String fbProfileName; private String fbAuthToken; private LoginButton fbLoginBtn; private static final String TAG = "FacebookLogin"; CallbackManager callbackManager; private AccessTokenTracker accessTokenTracker; private ProfileTracker profileTracker; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.register_activity); fbLoginBtn = (LoginButton) findViewById(R.id.connect_with_facebook_button); fbLoginBtn.setReadPermissions(Arrays.asList("email", "user_photos", "public_profile")); fbLoginBtn.setBackgroundResource(R.drawable.connect_facebook_button); accessTokenTracker = new AccessTokenTracker() { @Override protected void onCurrentAccessTokenChanged( AccessToken oldAccessToken, AccessToken currentAccessToken) { fbAuthToken = currentAccessToken.getToken(); fbUserID = currentAccessToken.getUserId(); Log.d(TAG, "User id: " + fbUserID); Log.d(TAG, "Access token is: " + fbAuthToken); } }; profileTracker = new ProfileTracker() { @Override protected void onCurrentProfileChanged( Profile oldProfile, Profile currentProfile) { fbProfileName = currentProfile.getName(); Log.d(TAG, "User name: " + fbProfileName ); } }; fbLoginBtn.registerCallback(callbackManager, new FacebookCallback<LoginResult>() { @Override public void onSuccess(LoginResult loginResult) { } @Override public void onCancel() { // App code } @Override public void onError(FacebookException exception) { // App code } }); } @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); callbackManager.onActivityResult(requestCode, resultCode, data); } GraphRequest request = GraphRequest.newMeRequest( accessToken, new GraphRequest.GraphJSONObjectCallback() { @Override public void onCompleted( JSONObject user, GraphResponse response) { String id = user.optString("id"); String firstName = user.optString("first_name"); String lastName = user.optString("last_name"); String email = user.optString("email"); } @Override public void onSaveInstanceState(Bundle savedState) { super.onSaveInstanceState(savedState); } 

  • Android: listview item width fill_parent funktioniert nicht
  • Wie Lastfragment in ViewPager nur wenn es ausgewählt ist
  • Kann der Android-Layout-Ordner Unterordner enthalten?
  • Paho MQTT Android Service aufwachen Aktivität
  • Jede einfache oder einfache Möglichkeit, Android NDK-Code zu debuggen?
  • Firebase NullPointerException in Play Services 9.2.1
  • Wie zu unterdrücken "Kann mit foreach call" Warnung ersetzt werden
  • Wie bekomme ich die IP-Adresse jedes Geräts im Wi-Fi Direct-Szenario?
  • Wie kontrolliere ich Landschaft und Porträt programmgesteuert in Android?
  • Diese Anwendung hat nicht das Debugable-Attribut in seinem Manifest aktiviert
  • Wie man Android-Eigenschaften mit Java liest
  • Wie kann ich mit ksoap2 den Parameter auf einen Webservice übergeben?
  • 3 Solutions collect form web for “Android Facebook SDK 4.X, wie man E-Mail-Adresse und Facebook Access Token erhalten, um es an Web Service weiterzugeben”

     fbLoginBtn.registerCallback(callbackManager, new FacebookCallback<LoginResult>() { @Override public void onSuccess(LoginResult loginResult) { GraphRequest.newMeRequest( loginResult.getAccessToken(), new GraphRequest.GraphJSONObjectCallback() { @Override public void onCompleted(JSONObject me, GraphResponse response) { if (response.getError() != null) { // handle error } else { String email = me.optString("email"); String id = me.optString("id"); // send email and id to your web server } } }).executeAsync(); } @Override public void onCancel() { // App code } @Override public void onError(FacebookException exception) { // App code } }); 

    Einfachste Antwort, die ich nach Stunden der Suche gefunden habe, ist wie folgt, die höchste abgestimmte Antwort hat nicht für mich gearbeitet und E-Mail war immer leer

     LoginManager.getInstance().registerCallback(mCallbackManager, new FacebookCallback<LoginResult>() { @Override public void onSuccess(LoginResult loginResult) { GraphRequest request = GraphRequest.newMeRequest(AccessToken.getCurrentAccessToken(), new GraphRequest.GraphJSONObjectCallback() { @Override public void onCompleted(JSONObject object,GraphResponse response) { JSONObject json = response.getJSONObject(); try { if(json != null){ String text = json.getString("email"); Log.d("email",text); } } catch (JSONException e) { e.printStackTrace(); } } }); Bundle parameters = new Bundle(); parameters.putString("fields", "id,name,link,email,picture"); request.setParameters(parameters); request.executeAsync(); } @Override public void onCancel() { // App code } @Override public void onError(FacebookException exception) { // App code } }); 

    Ich glaube, dass die Einstellung von Parametern als Pflichtfelder auf die Graph Request eine entscheidende Sache hier ist. Sie können diesen Code auch mit LoginButton verwenden, funktioniert ohne Ausgabe.

    ****** Update ******** Nach der Verwendung dieses Codes mit vielen Konten festgestellt, dass, wenn die E-Mail nicht überprüft wird, wird es nicht zurückgegeben werden, in diesem Fall nach Code geholfen zusammen mit abo

     facebookLoginButton.setReadPermissions("email"); 

    Hoffe das hilft weiter

    Ich muss extra Feld für Benutzer E-Mail hinzufügen.

      //register facebook login callback LoginManager.getInstance().registerCallback(mCallbackManager, new FacebookCallback<LoginResult>() { @Override public void onSuccess (LoginResult loginResult) { Log.d(TAG, "FB: login success"); showLoading(true); final String token = loginResult.getAccessToken().getToken(); //prepare fields with email String[] requiredFields = new String[]{"email"}; Bundle parameters = new Bundle(); parameters.putString("fields", TextUtils.join(",", requiredFields)); GraphRequest requestEmail = new GraphRequest(loginResult.getAccessToken(), "me", parameters, null, new GraphRequest.Callback() { @Override public void onCompleted (GraphResponse response) { if (response != null) { GraphRequest.GraphJSONObjectCallback callbackEmail = new GraphRequest.GraphJSONObjectCallback() { @Override public void onCompleted (JSONObject me, GraphResponse response) { if (response.getError() != null) { Log.d(TAG, "FB: cannot parse email"); showDialog(getString(R.string.dialog_message_unknown_error)); showLoading(false); } else { String email = me.optString("email"); // send email and id to your web server //... } } }; callbackEmail.onCompleted(response.getJSONObject(), response); } } }); requestEmail.executeAsync(); } @Override public void onCancel () { Log.d(TAG, "FB: login cancel"); showDialog(getString(R.string.dialog_message_unknown_error)); } @Override public void onError (FacebookException e) { Log.d(TAG, "FB: login error " + e.getMessage()); showDialog(getString(R.string.dialog_message_unknown_error)); } }); 
    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.