4

Это мой первый пост, поэтому, пожалуйста, дайте мне знать, если я не соблюдаю правила сообщества.Facebook Войти Не вернусь Пользователь access_token

Теперь проблема! Я пытаюсь настроить процесс входа в Facebook для приложения, и я дошел до добавления элемента GUI (встроенная кнопка входа в систему Facebook) и нажав кнопку и попросил пользователя/пароль, предоставляя приложению доступ к учетной записи пользователя. Проблема, с которой я сталкиваюсь, заключается в том, что при использовании следующего кода для получения значения обратного вызова из приложения я ничего не получаю (никакое значение не печатается). Прямо сейчас я печатаю на произвольные значения LogCat, однако, как только печать работает, я смотрю, как получить доступ к пользователю access_token и другой информации (которая изначально не работала). Любая помощь ценится!

protected void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.activity_connect_accounts); 

      Log.i("fromMe", "test1"); 
      FacebookSdk.sdkInitialize(this.getApplicationContext()); 
      callbackManager = CallbackManager.Factory.create(); 
      LoginButton loginButton = (LoginButton)findViewById(R.id.login_button); 
      loginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>(){ 

       public void onSuccess(LoginResult loginResult) { 
        Log.i("fromMe", "1"); 
       } 

       public void onCancel() { 
        Log.i("fromMe", "2"); 
       } 

       public void onError(FacebookException exception) { 
        Log.i("fromMe", "3"); 
       } 
      }); 
     } 

ответ

1

если Log.i("fromMe", "1"); работы, так что вы можете позвонить:

AccessToken accessToken = loginResult.getAccessToken(); 

в вашем onSuccess().

И onActivityResult(int requestCode, int resultCode, Intent data) оных:

super.onActivityResult(requestCode, resultCode, data); 
callbackManager.onActivityResult(requestCode, resultCode, data); 
+0

accessToken.getToken(); чтобы получить токен app – YenMinh

+0

Да, это правильно. – theapache64

+0

Проблема заключалась в том, что 'Log.i (" fromMe "," 1 ")' никогда не работал. – Novice

1

Я никогда не использовал встроенную кнопку facebook, вместо этого я использовал обычную кнопку щелчком слушателя. и я вызываю этот метод в onClick().

myButton.setOnClickListener(new View.OnClickListener(){ 
    @Override 
    public void onClick(View v){ 
     //Starting facebook signIN 
     startFbSignIn(); 
    } 
}); 

startFbSignIn();

private void startFbSignIn() { 

     List<String> permissions = new ArrayList<>(); 
     permissions.add("email"); 

     Session.openActiveSession(this, true, permissions, new Session.StatusCallback() { 
      @Override 
      public void call(final Session session, SessionState sessionState, Exception e) { 

       Log.d("X", "Call Called"); 

       if (session.isOpened()) { 

        Log.d("X", "SessionOpened" + session.getAccessToken()); 

        //Showing some loading 


        Request.newMeRequest(session, new Request.GraphUserCallback() { 
         @Override 
         public void onCompleted(GraphUser graphUser, Response response) { 

          //FACEBOOOK SIGNIN SUCCESS 
          Log.i("X", "Facebook Login Success"); 
          //Log 
          Log.d("X", "GRAPH USER:" + graphUser.toString()); 


          String name = graphUser.getName(); 
          //..... 

         } 
        }).executeAsync(); 

       } else { 
        Log.d("X", "SessioNOTopened"); 
       } 

      } 
     }); 

    } 

выше метод успешно работает для меня, и ваш onActivityResult() должен выглядеть как этот

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

    //Facebook Session Manager 
    Session.getActiveSession().onActivityResult(this, requestCode, resultCode, data); 
} 
+0

Я даю этот метод выстрелу, и единственная проблема, с которой я столкнулась, заключается в том, что сеанс и запрос «не могут быть решены», и при попытке импортировать классы с использованием автоматической установки Android Studio ничего не появляется после com.facebook.Ses ... и com.facebook.Req ... – Novice

+0

Думаю, вы скомпилировали проект с помощью последнего SDK для Facebook. Попробуйте выполнить компиляцию проекта с помощью этого 'compile 'com.facebook.android: facebook-android-sdk: 3.23.0'' вместо последнего. – theapache64

1

Вероятно причиной ошибки в facebook SDK вы не можете непосредственно получить маркер доступа. Нам нужно создать маркер доступа трекер, а затем получить маркер доступа

private AccessTokenTracker accessTokenTracker; 
    accessTokenTracker = new AccessTokenTracker() { 


     @Override 
     protected void onCurrentAccessTokenChanged(AccessToken oldAccessToken, AccessToken newAccessToken) { 
      try { 

       if (newAccessToken.getToken() != null) { 
        facebookAccessToken = newAccessToken.getToken(); 
        //this is your accessToken here 

       } 
       else if (oldAccessToken.getToken() != null) { 
        facebookAccessToken = oldAccessToken.getToken(); 
        //this is your accessToken here 
       }else { 
        Toast.makeText(getBaseContext(), "Facebook Login Failed", Toast.LENGTH_LONG).show(); 
       } 

       if(oldAccessToken.getToken()!=null) 
       Log.e("old", oldAccessToken.getToken()); 
      }catch (Exception e){ 
       e.printStackTrace(); 
      } 

     } 
    }; 

раз это успешно сделано, overide в OnStop метод деятельности и убедитесь, что вы stoptracking в маркер доступа там.

accessTokenTracker.stopTracking(); 
Смежные вопросы