2015-04-01 6 views
8

Mam zintegrowany najnowszy system Android SDK 4.0. W SDK 3.0+ adres e-mail użytkownika jest ponownie pobierany za pomocą user.getProperty ("email") po pomyślnym zalogowaniu. Szukam odpowiedniego polecenia w Android SDK Facebook 4,0 odniesienia Links:Potrzebuję adresu e-mail użytkownika po pomyślnym zalogowaniu się na Facebooka w Androidzie przy użyciu SDK 4.0

https://developers.facebook.com/docs/facebook-login/android/v2.3#overview https://developers.facebook.com/docs/android/upgrading-4.x

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    FacebookSdk.sdkInitialize(getActivity().getApplicationContext()); 
    callbackManager = CallbackManager.Factory.create(); 
} 

@Override 
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { 
    super.onViewCreated(view, savedInstanceState); 
    loginButton = (LoginButton) view.findViewById(R.id.login_button); 
    loginButton.setReadPermissions("email", "user_likes", "user_friends"); 
    loginButton.setFragment(this); 
    setFacebookLoginText(loginButton); 
    // Other app specific specialization 

    // Callback registration 
    loginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() { 
     @Override 
     public void onSuccess(LoginResult loginResult) { 
      AccessToken accessToken = loginResult.getAccessToken(); 
      GraphRequest request = GraphRequest.newMeRequest(accessToken, new GraphRequest.GraphJSONObjectCallback() { 
       @Override 
       public void onCompleted(JSONObject user, GraphResponse graphResponse) { 

        //Need User email address after login success. 

       } 
      }).executeAsync(); 
     } 

     @Override 
     public void onCancel() { 
      Toast.makeText(getActivity(), "fail", Toast.LENGTH_SHORT).show(); 
     } 

     @Override 
     public void onError(FacebookException exception) { 
      Toast.makeText(getActivity(), "error", Toast.LENGTH_SHORT).show(); 
     } 
    }); 

} 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    View view = inflater.inflate(R.layout.fragment_facebook_login, container, false); 
    return view; 
} 


@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    callbackManager.onActivityResult(requestCode, resultCode, data); 
} 

Odpowiedz

13

Tak to działało. Jedyną rzeczą wymagającą zmiany była zmiana GraphRequest na GraphRequestAsyncTask w onSuccess metody FacebookCallBack, a następnie szczegóły użytkownika można było łatwo pobrać z JSONObject.

 @Override 
     public void onSuccess(LoginResult loginResult) { 
      final AccessToken accessToken = loginResult.getAccessToken(); 
      final FBUser fbUser = new FBUser(); 
      GraphRequestAsyncTask request = GraphRequest.newMeRequest(accessToken, new GraphRequest.GraphJSONObjectCallback() { 
       @Override 
       public void onCompleted(JSONObject user, GraphResponse graphResponse) { 
        fbUser.setEmail(user.optString("email")); 
        fbUser.setName(user.optString("name")); 
        fbUser.setId(user.optString("id")); 
       } 
      }).executeAsync(); 
     } 

FBUser model Class

public class FBUser { 
private String name; 
private String email; 

public FBUser(String displayName, String email) { 
    this.name= displayName; 
    this.email = email; 
} 

public FBUser() { 

} 

public String getName() { 
    return displayName; 
} 

public void setName(String displayName) { 
    this.displayName = displayName; 
} 


public String getEmail() { 
    return email; 
} 

public void setEmail(String email) { 
    this.email = email; 
} 

} 
+0

jak można przechowywać typ obiektu GraphRequest do odniesienia typu GraphRequestAsyncTask, to nie działa –

+0

używam przycisku niestandardowego na kliknięcia i FacebookManager .. po udanym logowaniu .. I nie dostaję ok ;; do tego na Sukces(). proszę podać mi właściwy sposób na uzyskanie tych informacji. –

+0

tak, działa, ale dostaję tylko nazwę użytkownika i identyfikator, nie otrzymuję wiadomości e-mail i zdjęcia profilowego z tego – NarendraJi

5

W nowym wykresie facebook trzeba zadać uprawnienia do dostępu do tych informacji. na przykład na aktywność masz umieścić LoginButton dodać ten wiersz w metodzie OnCreate

loginButtonFacebook.setReadPermissions(Arrays.asList("public_profile", "email", "user_birthday")); 

Wtedy masz te informacje

loginButtonFacebook.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"); 
       } 
      } 
     }).executeAsync(); 
} 
0

Oprócz tego testu, jeśli masz do tego uprawnienia, inaczej poprosić użytkownikom jeszcze:

AccessToken accessToken=AccessToken.getCurrentAccessToken(); 
if (accessToken.getPermissions().contains("email")) { 

} else { 

} 
+0

BTW Myślę, że jest błąd w tym: https://github.com/ParsePlatform/ParseUI-Android/issues/51 – Ricardo

1

To daje wszystkie informacje z facebook SDK 4.0.0

fbloginButton.setReadPermissions ("email");

fbloginButton.registerCallback(callbackmanager, new FacebookCallback<LoginResult>() { 
     @Override 
     public void onSuccess(LoginResult loginResult) { 
      AccessToken accessToken = loginResult.getAccessToken(); 
      GraphRequest graphRequest=GraphRequest.newMeRequest(accessToken, new GraphRequest.GraphJSONObjectCallback() { 
       @Override 
       public void onCompleted(JSONObject object, GraphResponse response) { 

        if (response.getError()!=null) 
        { 
         Log.e(TAG,"Error in Response "+ response); 
        } 
        else 
        { 
         email=object.optString("email"); 
         Log.e(TAG,"Json Object Data "+object+" Email id "+ email); 
        } 


       } 
      }); 

      Bundle bundle=new Bundle(); 
      bundle.putString("fields","id,email,name"); 
      graphRequest.setParameters(bundle); 
      graphRequest.executeAsync(); 

     } 
Powiązane problemy