Използвам 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.