Hello @Maksym_Khobotin2,
I’ve tried updating my Backendless SDK to the latest version, but an issue still occurs. It looks like the Backendless.UserService.loginWithFacebookSdk has already been removed, and in its place there is this a new function:
Backendless.UserService.loginWithOAuth2
It still fails at this method, but the error message is now different:
Not existing user token - C7A386A7-3EDD-4095-A0F6-24B96E4EFCFF. Relogin user to update your user token
Here is the code I use to login users to Facebook, and then the code to connect the account to Backendless:
private void loginWithFacebook(){
final ProgressDialog fbLoading = new ProgressDialog(LoginActivity.this);
fbLoading.setCancelable(false);
fbLoading.setMessage(getResources().getString(R.string.login_loading));
fbLoading.show();
LoginManager.getInstance().registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(final LoginResult loginResult) {
GraphRequest request = GraphRequest.newMeRequest(loginResult.getAccessToken(), new GraphRequest.GraphJSONObjectCallback() {
@Override
public void onCompleted(JSONObject object, GraphResponse response) {
Log.d("access token", loginResult.getAccessToken().getToken());
Log.d("permissions granted", loginResult.getRecentlyGrantedPermissions().toString());
Log.d("permissions denied", loginResult.getRecentlyDeniedPermissions().toString());
connectFacebookToBackendless(loginResult.getAccessToken(), fbLoading);
}
});
request.executeAsync();
}
@Override
public void onCancel() {
fbLoading.dismiss();
}
@Override
public void onError(FacebookException error) {
fbLoading.dismiss();
Toast.makeText(LoginActivity.this, getResources().getString(R.string.error), Toast.LENGTH_LONG).show();
}
});
LoginManager.getInstance().logIn(LoginActivity.this, Arrays.asList("public_profile", "email"));
}
private void connectFacebookToBackendless(AccessToken token, final ProgressDialog dialog) {
Map<String, String> fields = new HashMap<>();
fields.put("name", "name");
fields.put("email", "email");
fields.put("id", "fbId");
Backendless.UserService.loginWithOAuth2("facebook", token.getToken(), fields, new AsyncCallback<BackendlessUser>() {
@Override
public void handleResponse(BackendlessUser user) {
UserData.saveUserData(LoginActivity.this, user);
if (UserData.getProfileImageUrl(LoginActivity.this) == null || UserData.getProfileImageUrl(LoginActivity.this).isEmpty()) {
user.setProperty("profileImageUrl", "https://graph.facebook.com/" + UserData.getUserFbId(LoginActivity.this) + "/picture?type=large");
Backendless.Data.of(BackendlessUser.class).save(user, new AsyncCallback<BackendlessUser>() {
@Override
public void handleResponse(BackendlessUser response) {
UserData.saveUserData(LoginActivity.this, response);
dialog.dismiss();
goToMainActivity();
}
@Override
public void handleFault(BackendlessFault fault) {
dialog.dismiss();
goToMainActivity();
}
});
} else {
dialog.dismiss();
goToMainActivity();
}
}
@Override
public void handleFault(BackendlessFault fault) {
dialog.dismiss();
Log.d("error", fault.getMessage());
Toast.makeText(LoginActivity.this, fault.getMessage(), Toast.LENGTH_LONG).show();
}
}, true);
}
The only stacktrace I can find that could be relevant is this:
Could not unregister device on Backendless server: BackendlessFault{ code: '3064', message: 'Not existing user token - C7A386A7-3EDD-4095-A0F6-24B96E4EFCFF. Relogin user to update your user token', detail: 'Not existing user token - C7A386A7-3EDD-4095-A0F6-24B96E4EFCFF. Relogin user to update your user token', extendedData: '{}' }