Аутентификация пользователя через Facebook с помощью Servicestack (Java & Swift)

Я использую клиентский пакет служб в своих приложениях для Android(Java) и iOS(Swift), но мне нужно аутентифицировать пользователей с помощью Facebook и Google. Знаете ли вы, существует ли такой модуль, как Xamarin.Auth https://github.com/xamarin/Xamarin.Auth а для родных приложений?

Спасибо

1 ответ

Решение

Взгляните на AndroidJavaChat, который является портом C# Xamarin. В Android Chat он объясняет несколько различных способов аутентификации с Facebook с использованием их SDK и использует новую поддержку аутентификации с использованием AccessToken в ServiceStack v4.5.7+, которая теперь доступна на MyGet

Сначала следуйте этому руководству по началу работы, чтобы установить SDK Facebook.

Затем ознакомьтесь с реализацией для LoginButtonActivity, которая аутентифицируется с помощью кнопки входа в Facebook, которую вы можете определить в своем Layout.xml с помощью:

<com.facebook.login.widget.LoginButton
    android:id="@+id/btnFacebookLogin"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center_horizontal"
    android:layout_marginTop="30dp"
    android:layout_marginBottom="30dp" />

Вход с помощью кнопки входа в Facebook

Чтобы использовать SDK Facebook, ваш AppId должен быть определен в вашем AndroidManifest.xml:

<meta-data android:name="com.facebook.sdk.ApplicationId" android:value="@string/facebook_app_id"/>

С использованием ApplicationId для вашего приложения Facebook из вашего приложения, созданного в https://developers.facebook.com/apps

Затем вы можете авторизоваться с помощью кнопки входа в Facebook, зарегистрировав обратный вызов на LoginButton, После этого это просто вопрос обработки Facebook onSuccess(), onCancel() а также onError() Обратные вызовы. Когда onSuccess() обратный вызов запускается, это означает, что пользователь успешно вошел в наше приложение для Android, затем нам нужно пройти аутентификацию на нашем сервере чата ServiceStack, сделав запрос на проверку подлинности с помощью пользователя в Facebook AccessToken Например:

facebookCallback = CallbackManager.Factory.create();
btnFacebookLogin = (LoginButton) findViewById(R.id.btnFacebookLogin);
btnFacebookLogin.setReadPermissions("email"); // Ask user for permission to view access email address
btnFacebookLogin.registerCallback(facebookCallback, new FacebookCallback<LoginResult>() {
    @Override
    public void onSuccess(LoginResult loginResult) {
        UiHelpers.setStatus(txtStatus, "Local facebook sign-in successful, signing into server...");

        App.get().getServiceClient().postAsync(new dtos.Authenticate()
            .setProvider("facebook")
            .setAccessToken(loginResult.getAccessToken().getToken())
            .setRememberMe(true),
            r -> {
                UiHelpers.setStatus(txtStatus, "Server facebook sign-in successful, opening chat...");
                Intent intent = new Intent(activity, MainActivity.class);
                stopProgressBar();
                startActivity(intent);
            },
            error -> {
                UiHelpers.setStatusError(txtStatus, "Server facebook sign-in failed", error);
                stopProgressBar();
            });
    }

    @Override
    public void onCancel() {
        stopProgressBar();
    }

    @Override
    public void onError(FacebookException exception) {
        Log.e(exception);
        stopProgressBar();
    }
});

После того как пользователь прошел аутентификацию на сервере ServiceStack, на клиенте службы настраиваются аутентифицированные сеансовые файлы cookie, которые теперь можно использовать для выполнения аутентифицированных запросов.

Если вместо этого вы хотите войти в систему, используя собственное пользовательское изображение для кнопки входа, выполните действия, описанные в разделе " Вход в систему с помощью пользовательской кнопки изображения Facebook".

Автоматический вход ранее зарегистрированных пользователей

После того, как Пользователь успешно прошел аутентификацию в Facebook, вы можете в первый раз получить доступ к сохраненному токену из Facebook. AccessToken.getCurrentAccessToken() для автоматической регистрации их для будущих перезапусков, например:

AccessToken facebookAccessToken = AccessToken.getCurrentAccessToken();
    if (facebookAccessToken != null){
        client.postAsync(dtos.Authenticate()
            .setProvider("facebook")
            .setAccessToken(facebookAccessToken.getToken())
            .setRememberMe(true),
            r -> {
                //User has signed using Saved Access Token
            });
    }
Другие вопросы по тегам