2016-04-27 9 views
1

私はfacebook sdk v-4とandroid appを統合しました。ここでは、2つのアクティビティでFacebookのログインに取り組んだ。facebookログインダイアログを閉じるandroid

1)fbログインは、LoginButtonで行われます。ログインに成功すると、fbログインダイアログはfacebook sdkによって自動的に閉じられます。

コード:

fbLoginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() { 
     ProfileTracker profileTracker; 

     @Override 
     public void onSuccess(LoginResult loginResult) { 
      Logger.d("FBLOGIN", "login successful. User ID: " 
        + loginResult.getAccessToken().getUserId() 
        + "\n" + 
        "Auth Token: " 
        + loginResult.getAccessToken().getToken()); 

      com.facebook.Profile fbProfile = com.facebook.Profile.getCurrentProfile(); 

      if (fbProfile == null) { 
       profileTracker = new ProfileTracker() { 
        @Override 
        protected void onCurrentProfileChanged(com.facebook.Profile oldProfile, com.facebook.Profile currentProfile) { 
         profileTracker.stopTracking(); 
         doTaskWithFbProfile(currentProfile); 
        } 
       }; 
       profileTracker.startTracking(); 
      } else { 
       doTaskWithFbProfile(fbProfile); 
      } 

     } 

     @Override 
     public void onCancel() { 
      Logger.d(TAG, "fb Login attempt canceled."); 
     } 

     @Override 
     public void onError(FacebookException e) { 
      Logger.e(TAG, "fb Login attempt failed." + e); 
      Toast.makeText(LoginActivity.this,R.string.str_please_check_your_internet_connection,Toast.LENGTH_LONG).show(); 
     } 
    }); 

private void doTaskWithFbProfile(com.facebook.Profile fbProfile) { 
    Logger.d("FBLOGIN", "id - " + fbProfile.getId()); 
    Logger.d("FBLOGIN", "name - " + fbProfile.getName()); 
    Logger.d("FBLOGIN", "pic - " + fbProfile.getProfilePictureUri(150, 150)); 

    com.android.circlecare.models.common.Profile profile = new com.android.circlecare.models.common.Profile(); 
    profile.setFBID(fbProfile.getId()); 
    profile.setName(fbProfile.getName()); 
    profile.setProfilePhoto(fbProfile.getProfilePictureUri(150, 150).toString()); 

    Intent intent = new Intent(this, LoginWithFacebookActivity.class); 
    intent.putExtra(LoginWithFacebookActivity.EXTRA_PROFILE, profile); 

    startActivity(intent); 
    finish(); 

} 

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

2)私がFBにログインするLoginManagerを使用する一方。ログインに成功した後、ログインダイアログは終了せず、代わりにログインした後もダイアログは表示されません。

コード:

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

FacebookSdk.sdkInitialize(this.getApplicationContext()); 

mFacebookCallback = new FacebookCallback<LoginResult>() { 
     ProfileTracker profileTracker; 

     @Override 
     public void onSuccess(LoginResult loginResult) { 
      Profile fbProfile = Profile.getCurrentProfile(); 

      if (fbProfile == null) { 
       profileTracker = new ProfileTracker() { 
        @Override 
        protected void onCurrentProfileChanged(Profile oldProfile, Profile currentProfile) { 
         profileTracker.stopTracking(); 
         getAllFriends(); 
        } 
       }; 
       profileTracker.startTracking(); 
      } else { 
       getAllFriends(); 
      } 
     } 

     @Override 
     public void onCancel() { 
      Logger.d(TAG, "fb Login attempt canceled."); 
     } 

     @Override 
     public void onError(FacebookException error) { 
      Logger.d(TAG, "Error : " + error.getMessage()); 
      finish(); 
     } 
    }; 

    callbackManager = CallbackManager.Factory.create(); 

    if (hasAccess) 
     getAllFriends(); 
    else 
     loginWorks(); 
} 


    private void loginWorks() { 
    loginManager = LoginManager.getInstance(); 
    loginManager.registerCallback(callbackManager, mFacebookCallback); 

    ArrayList<String> publishPermission = new ArrayList<>(); 
    publishPermission.add("publish_pages"); 
    publishPermission.add("publish_actions"); 
    loginManager.logInWithPublishPermissions(this, publishPermission); 

    ArrayList<String> readPermission = new ArrayList<>(); 
    readPermission.add("user_friends"); 
    readPermission.add("public_profile"); 
    readPermission.add("user_about_me"); 
    loginManager.logInWithReadPermissions(this, readPermission); 
} 

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

私は両方のケースでほぼ同じコードを使用しましたが、LoginManagerで作業する場合、ログインダイアログが閉じますされていない私はなぜだろうか。

問題を指摘したり、fbログインダイアログ(Webビュー)を却下するAPIがありますか。

+1

私は自分のコードを見る必要があります。 –

答えて

1

あなたのloginWorks()メソッドでは、文字通りloginを2回呼び出しています。実際には2つの異なるログイン画面が表示されていて、そのうちの1つを終了してもダイアログが閉じないように見えます。 loginWithPublishPermissions呼び出しを削除して、実際に必要な場合は読み取り権限呼び出しのコールバックに入れてみてください。

+0

問題を見つけてくれてありがとう。私は、異なるアクセス権を持つ異なるログインへのFacebookのアプローチについて疑問に思います。それは混乱です。 –

関連する問題