2015-09-11 1 views
3

Я использую последнюю версию sdk для Android для андроида в своем приложении.Как получить изображение профиля, основной адрес электронной почты, ссылку Facebook пользователя из приложения Android в Facebook SDK 4.5?

public class MainActivity extends AppCompatActivity { 
    public static CallbackManager callbackmanager; 
    private AccessTokenTracker mTokenTracker; 
    private ProfileTracker mProfileTracker; 
    Button fb_login; 

    private boolean fb_signincllicked = false; 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     FacebookSdk.sdkInitialize(getApplicationContext()); 

     setContentView(R.layout.activity_main); 


     fb_login = (Button) findViewById(R.id.fb_login_button); 
     fb_login.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       onFblogin(true); 
      } 
     }); 
    } 

    public void onFblogin(boolean fb_btn) { 

     fb_signincllicked = fb_btn; 

     callbackmanager = CallbackManager.Factory.create(); 
//  setupTokenTracker(); 
//  setupProfileTracker(); 
//  mTokenTracker.startTracking(); 
//  mProfileTracker.startTracking(); 
     // Set permissions 
     LoginManager.getInstance().logInWithReadPermissions(this, Arrays.asList("public_profile", "email")); 

     LoginManager.getInstance().registerCallback(callbackmanager, new FacebookCallback<LoginResult>() { 
      @Override 
      public void onSuccess(LoginResult loginResult) { 
//    AccessToken accessToken = loginResult.getAccessToken(); 
//    Profile profile = Profile.getCurrentProfile(); 
       final Set<String> deniedPermissions = loginResult.getRecentlyDeniedPermissions(); 

       GraphRequest.newMeRequest(loginResult.getAccessToken(), new GraphRequest.GraphJSONObjectCallback() { 
        @Override 
        public void onCompleted(JSONObject json, GraphResponse response) { 

         if (response.getError() != null) { 
          // handle error 
         } else { 
          try { 

//        if (deniedPermissions.contains("email")) { 
//         LoginManager.getInstance().logInWithReadPermissions(Login_Activity.this, Arrays.asList("email")); 
//        } 

           JSONObject jsonObject = new JSONObject(); 
           if (jsonObject.has("picture")) { 
            String profilePicUrl = jsonObject.getJSONObject("picture").getJSONObject("data").getString("url"); 
            System.out.println("111015:profilePicUrl" + profilePicUrl); 

           } else { 
            System.out.println("111015:profilePicUrl" + "No Data"); 

           } 
           jsonObject.put("full_name", json.getString("name")); 
           Toast.makeText(getApplicationContext(), json.get("id").toString() + json.getString("name"), Toast.LENGTH_LONG).show(); 
           jsonObject.put("device_id", Settings.Secure.getString(getContentResolver(), Settings.Secure.ANDROID_ID)); 
           jsonObject.put("fb_id", json.getString("id")); 
           jsonObject.put("signuptype", "1"); 

           Intent i = new Intent(getBaseContext(), Profile.class); 
           i.putExtra("prof_name", json.getString("name")); 
           i.putExtra("fb_id", json.getString("id")); 

           startActivity(i); 
          } catch (JSONException e) { 
           e.printStackTrace(); 
          } 
         } 
        } 
       }).executeAsync(); 
      } 

      @Override 
      public void onCancel() { 
       Log.d("Cancel", "On cancel"); 
      } 

      @Override 
      public void onError(FacebookException error) { 
       Log.d("Error", error.toString()); 
      } 
     }); 
    } 


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

     if (fb_signincllicked) { 
      callbackmanager.onActivityResult(requestCode, resultCode, data); 
     } 


    } 
    @Override 
    public void onStop() { 
     super.onStop(); 
//  mTokenTracker.stopTracking(); 
//  mProfileTracker.stopTracking(); 
    } 
// private void setupTokenTracker() { 
//  mTokenTracker = new AccessTokenTracker() { 
//   @Override 
//   protected void onCurrentAccessTokenChanged(AccessToken oldAccessToken, AccessToken currentAccessToken) { 
//    Log.d("VIVZ", "" + currentAccessToken); 
//   } 
//  }; 
// } 
// 
// private void setupProfileTracker() { 
//  mProfileTracker = new ProfileTracker() { 
//   @Override 
//   protected void onCurrentProfileChanged(Profile oldProfile, Profile currentProfile) { 
//    Log.d("VIVZ", "" + currentProfile); 
//   } 
//  }; 
// } 
} 

После успеха полного Логин (который удался) я хочу, чтобы перейти к другому activity.There я хочу показать следующее,

  1. Facebook профиль фото в представлении пользовательских изображений (не в изображении вид, который предоставил Facebook).
  2. Primary-Email
  3. Номер телефона (если это предусмотрено в Face Book пользователя)
  4. Facebook ссылку на пользователя.

Пожалуйста, помогите мне. Заранее спасибо.

ответ

0

На вашем onActivityCreated() поместить этот код:

@Override 
public void onActivityCreated(Bundle savedInstanceState) { 
    super.onActivityCreated(savedInstanceState); 
    updateWithToken(AccessToken.getCurrentAccessToken()); 
} 

тогда вот мой код, который я сейчас использую его, чтобы сделать facebook Войти:

private void updateWithToken(AccessToken currentAccessToken) { 

    mTokenTracker.startTracking(); 
    mProfileTracker.startTracking(); 

    if (currentAccessToken != null) { 

     String accessToken = currentAccessToken 
       .getToken(); 
     Log.i("accessToken", accessToken); 

     GraphRequest request = GraphRequest.newMeRequest(
       currentAccessToken, 
       new GraphRequest.GraphJSONObjectCallback() { 
        @Override 
        public void onCompleted(JSONObject object, 
              GraphResponse response) { 

         Log.i("LoginActivity", 
           response.toString()); 
         try { 
          String id = object.getString("id"); 
          try { 
           URL profile_pic = new URL(
             "http://graph.facebook.com/" + id + "/picture?type=large"); 
           Log.i("profile_pic", 
             profile_pic + ""); 

          } catch (MalformedURLException e) { 
           e.printStackTrace(); 
          } 
          if (!sessionManagerFacebook.isLoggedIn()) { 
           sessionManagerFacebook.createLoginSession(object.getString("email"), getResources().getConfiguration().locale.toString()); 
           if (cameFromQuestionExtra != null && cameFromQuestionExtra.getString("cameFromQuestion").equals("yes")) { 

            getActivity().setResult(1); 
            getActivity().finish(); 
           } 
           //startActivity(new Intent(getActivity(), MainActivity.class)); 
          } else { 
           user = sessionManagerFacebook.getUserDetails(); 
           startActivity(new Intent(getActivity(), MainActivity.class)); 
          } 

          getActivity().finish(); 

         } catch (JSONException e) { 
          e.printStackTrace(); 
         } 
        } 
       }); 

     Bundle parameters = new Bundle(); 
     parameters.putString("fields", 
       "id,name,email,gender"); 
     request.setParameters(parameters); 
     request.executeAsync(); 


    } 


} 

А на ваш Второе мероприятие u просто нужно изменить новый профиль:

Profile profile = Profile.getCurrentProfile(); 
if (profile != null) { 

     Toast.makeText(MainActivity.this, profile.getName(), Toast.LENGTH_SHORT).show(); 
     loadImages(profile.getProfilePictureUri(120, 120).toString()); 
     profileName.setText(profile.getName()); 

     mDrawer.getMenu().findItem(R.id.nav_myAccount).setVisible(false); 
     Bundle extra = getIntent().getExtras(); 
     String email; 
     if (extra != null) { 
      email = extra.getString("email"); 
      profileEmail.setText(email); 
      Toast.makeText(MainActivity.this, email, Toast.LENGTH_SHORT).show(); 
     } else if (sessionManagerFacebook.isLoggedIn()) { 
      profileEmail.setText(userFacebook.get(SessionManagerFacebook.KEY_EMAIL)); 
      Toast.makeText(MainActivity.this, userFacebook.get(SessionManagerFacebook.KEY_EMAIL), Toast.LENGTH_SHORT).show(); 

     } 

    } 

https://developers.facebook.com/docs/reference/android/current/class/Profile/

Смежные вопросы