Я использую Quickblox в своем приложении и не могу войти в систему с помощью токена Facebook, вот как я создаю сеанс QB, который отлично работает:
public static void createSession(final QBEntityCallback callback){
QBAuth.createSession(new QBEntityCallbackImpl<QBSession>() {
@Override
public void onSuccess(QBSession result, Bundle params) {
callback.onSuccess();
}
@Override
public void onError(List<String> errors) {
Log.e("QBSession", "error " + errors.toString());
}
});
}
Когда пользователь входит в систему с помощью facebook, токен результата не равен нулю, но когда я это делаю:
public static void registerUser(AccessToken currentAccessToken, final QBEntityCallbackImpl callback) {
if (currentAccessToken == null)return;
QBUsers.signInUsingSocialProvider(QBProvider.FACEBOOK, currentAccessToken.getToken(), null, new QBEntityCallbackImpl<QBUser>() {
@Override
public void onSuccess(QBUser user, Bundle args) {
callback.onSuccess(user, args);
}
@Override
public void onError(List<String> errors) {
Log.e("error", "is " + errors.toString());
}
});
}
Я получаю это в logcat:
E/error﹕ is [base Login or email required]
Здесь находятся документы.
Какие-либо предложения?
ОБНОВЛЕНИЕ
В случае, если это может помочь некоторым людям, вот как я это делаю сейчас:
Во-первых, я регистрируюсь таким образом, где Profile — это объект обратного вызова для входа в facebook:
public static void signUpUser(Profile newProfile, final QBEntityCallbackImpl callback){ QBUser qbUser = new QBUser(); qbUser.setFullName(newProfile.getName()); qbUser.setLogin(newProfile.getId()); qbUser.setPassword(newProfile.getId()); qbUser.setFacebookId(newProfile.getId()); QBUsers.signUp(qbUser, new QBEntityCallbackImpl<QBUser>() { @Override public void onSuccess(QBUser result, Bundle params) { callback.onSuccess(result, params); } @Override public void onError(List<String> errors) { callback.onError(errors); } });
}
После того, как пользователь создан, он может войти в систему, используя signUpUsingSocialProvider:
public static void signInUser(AccessToken currentAccessToken, final QBEntityCallbackImpl callback) { if (currentAccessToken == null)return; String facebookAccessToken = currentAccessToken.getToken(); QBUsers.signInUsingSocialProvider(QBProvider.FACEBOOK, facebookAccessToken, null, new QBEntityCallbackImpl<QBUser>() { @Override public void onSuccess(QBUser user, Bundle args) { callback.onSuccess(user, args); } @Override public void onError(List<String> errors) { callback.onError(errors); } });
}
Таким образом, хитрость заключалась в том, чтобы создать пользователя обычным способом перед входом в Facebook. Тогда этот пользователь может войти в систему на другом устройстве, просто используя свой сеанс Facebook.