2017-05-22 1 views
1

페이스 북과 연결된 구문 분석 세션으로 내 응용 프로그램에 로그인했습니다. 내가 페이스 북에 게시물을 공유하려고하면 페이스 북 창이 다시 로그인하는 것을 보여줍니다. 내가 이미 로그인했다면 왜 그렇게됩니까? 나는 Checked하고 AccessToken.getCurrentAccessToken()은 ShareDialog를 호출 할 때 null이 아니기 때문에 세션이있다. 뭐가 문제 야?안드로이드 Facebook Share 암호를 다시 묻는 버튼

WelcomeActivity

public void initializeFacebookButton() { 

    if (AccessToken.getCurrentAccessToken() == null) 
     ParseFacebookUtils.initialize(this); 

    mLoginButton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      progressBar.setVisibility(View.VISIBLE); 
      ParseFacebookUtils.logInWithReadPermissionsInBackground(WelcomeActivity.this, 
        read_permissions, new LogInCallback() { 
         @Override 
         public void done(ParseUser user, ParseException e) { 
          progressBar.setVisibility(View.GONE); 
          if (e == null && user != null){ 
           ParseFacebookUtils.linkWithPublishPermissionsInBackground(user, 
             WelcomeActivity.this, publish_permission); 
           Log.d(TAG, "logged in"); 
            presenter.getUserFacebook(AccessToken.getCurrentAccessToken(), 
             user); 
          } else { 
           Log.e(TAG, "Error logging in "); 
          } 
         } 
        }); 
     } 
    }); 
} 

ShareActivity

Button shareButton; 

shareButton.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       ShareOpenGraphObject object = new ShareOpenGraphObject.Builder() 
       .putString("og:type", "fitness.course") 
       .putString("og:title", title) 
       .putString("og:description", description) 
       .putInt("fitness:duration:value", time_in_seconds) 
       .putString("fitness:duration:units", "s") 
       .putDouble("fitness:metrics:location:latitude", latitude) 
       .putDouble("fitness:metrics:location:longitude", longitude) 
       .build(); 
     ShareOpenGraphAction action = new ShareOpenGraphAction.Builder() 
       .setActionType("fitness.runs") 
       .putObject("fitness:course", object) 
       .build(); 
     ShareOpenGraphContent content = new ShareOpenGraphContent.Builder() 
       .setPreviewPropertyName("fitness:course") 
       .setAction(action) 
       .build(); 

       ShareDialog.show(ShareActivity.this, content); 
      } 
     }); 
+0

'ShareDialog.show (ShareTheChallengeActivity, 내용)와

ParseFacebookUtils.linkWithPublishPermissionsInBackground(user, WelcomeActivity.this, publish_permission); Log.d(TAG, "logged in"); presenter.getUserFacebook(AccessToken.getCurrentAccessToken(), user); 

을 교체해야한다고 생각? – hellyale

+0

@hellyale 게시물에 대한 활동의 ​​원래 이름을 변경했기 때문에 오타가되었습니다. 나는 정정으로 내 대답을 편집했다. – Mauricio

답변

1

shareButton 클릭하기 전에 당신이 어딘가에 로그 아웃 했습니까? 아래 코드를 확인하십시오.

LoginManager.getInstance().logOut(); 
1

나는 당신의 문제가이 생각 -

사용 권한 게시 얻을 필요가
ParseFacebookUtils.logInWithReadPermissionsInBackground(WelcomeActivity.this, 
        read_permissions, 

-refer here

확인 - 코드에 따르면 logInWithReadPermissionsInBackground

1

을 먼저 logInWithReadPermissionsInBackground 것 실행, 독서 허가 요청한 페이스 북 쇼의 팝업, 다음 알림 팝업이 나타나야하고 게시 권한을 요청하십시오. linkWithPublishPermissionsInBackground 이 실행됩니다. 즉, 팝업을보고 두 번 확인해야한다고했습니다.

는하지만 때문에 (보유 및 linkWithPublishPermissionsInBackground를 실행) 현재의 활동이 종료입니다 실행 ParseFacebookUtils.linkWithPublishPermissionsInBackground(user, WelcomeActivity.this, publish_permission); 동안, 당신은 대시 보드 (또는 로그인 한 사용자에 대한 모든 페이지)에 대한 사용자를 탐색 presenter.getUserFacebook(AccessToken.getCurrentAccessToken(), user); 라고했다 두렵다. `; 난 당신이

ParseFacebookUtils.linkWithPublishPermissionsInBackground(user, WelcomeActivity.this, publish_permission,new LogInCallback(){public void done(ParseUser user, ParseException e) { 
if (e == null && user != null) { 
    Log.d(TAG, "logged in"); 
    presenter.getUserFacebook(AccessToken.getCurrentAccessToken(),user); 
}}});