Я использую socialauth-android, чтобы пользователи Android могли аутентифицировать себя на Facebook.
Моя проблема заключается в следующем:
Я могу успешно отобразить страницу входа в Facebook, где пользователь может ввести учетные данные и авторизовать мое приложение. Когда авторизация завершена, следует вызвать метод обратного вызова onComplete ReponseListener, связанный с SocialAuthAdapter.
Этого никогда не происходит, так как я получил исключение, говорящее, что код подтверждения недействителен, но я вижу на странице пользователя facebook, что мое приложение было авторизовано.
Похоже, что после успешной авторизации провайдер также ожидает проверочный код, чтобы клиент мог включить его в следующие запросы.
Я также не понял, является ли этот нулевой код токеном сеанса пользователя или чем-то еще.
Кто-нибудь сталкивался с подобной проблемой? Как это решить?
Я настроил свое приложение Facebook как собственное приложение для Android, как показано на рисунке
Показана упрощенная версия кода.
public class LoginActivity extends Activity {
private static final String LOG_TAG = "LoginActivity";
SocialAuthAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
adapter = new SocialAuthAdapter(new ResponseListener());
// [.....]
}
/**
* This method is invoked when the user click on my Facebook button to initiate the
* the authentication process with Facebook
*/
protected void doLogin(){
adapter.authorize(this, Provider.FACEBOOK);
}
private final class ResponseListener implements DialogListener {
@Override
public void onComplete(Bundle values) {
// Variable to receive message status
if (Log.isLoggable(LOG_TAG, Log.DEBUG)) {
Log.d(LOG_TAG, "Authentication Successful");
}
adapter.getUserProfileAsync(new SocialAuthListener<Profile>() {
@Override
public void onError(SocialAuthError arg0) {
Log.e(LOG_TAG, "Cannot retrieve user profile");
}
@Override
public void onExecute(Profile profile) {
Log.d(LOG_TAG, "ValidatedId = " + profile.getValidatedId());
});
}
Трассировка стека
Retrieving Access Token in verify response function
Verifying the authentication response from provider
org.brickred.socialauth.exception.SocialAuthException: Verification code is null
at org.brickred.socialauth.oauthstrategy.OAuth2.verifyResponse(OAuth2.java:114)
at org.brickred.socialauth.oauthstrategy.OAuth2.verifyResponse(OAuth2.java:102)
at org.brickred.socialauth.provider.FacebookImpl.doVerifyResponse(FacebookImpl.java:164)
at org.brickred.socialauth.provider.FacebookImpl.verifyResponse(FacebookImpl.java:154)
at org.brickred.socialauth.SocialAuthManager.connect(SocialAuthManager.java:183)
at org.brickred.socialauth.android.SocialAuthDialog$SocialAuthWebViewClient$1.run(SocialAuthDialog.java:243)
at java.lang.Thread.run(Thread.java:856)
org.brickred.socialauth.exception.SocialAuthException: Verification code is null
org.brickred.socialauth.android.SocialAuthError: Unknown Error