1

我在我的 Android(Java) 和 iOS(Swift) 应用程序中使用 servicestack 客户端,但我需要使用 facebook 和 google 对用户进行身份验证,你知道是否存在像Xamarin.Auth这样的模块 https://github.com/xamarin/ Xamarin.Auth但适用于本机应用程序?

谢谢

4

1 回答 1

2

看看AndroidJavaChat,它是C# Xamarin.Android Chat的一个端口,它解释了使用他们的 SDK 与 Facebook 进行身份验证的几种不同方法,并利用ServiceStack v4.5.7+中对使用 AccessToken 进行身份验证的新支持,现在可用我的获取

首先按照此入门指南安装 Facebook 的 SDK

然后检查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 登录按钮登录

要使用 Facebook 的 SDK,您的 AppId 需要在您的AndroidManifest.xml中定义:

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

从您在https://developers.facebook.com/appsApplicationId中创建的应用程序中为您的 Facebook 应用程序使用

然后,您可以通过在LoginButton. 之后,只需处理 FacebookonSuccess()和回调即可。当回调被触发时,意味着用户已成功登录到我们的 Android 应用程序,然后我们需要通过使用用户的 Facebook 发出 Authenticated 请求来与我们的 ServiceStack 聊天服务器进行身份验证,例如:onCancel()onError()onSuccess()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
            });
    }
于 2017-03-25T00:39:29.237 回答