Аутентификация пользователя через 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
});
}