首页 > 解决方案 > 使用 Google 登录以获取应用的 UWP 和 Xamarin.Forms (android) 版本

问题描述

我创建了 2 个应用程序,一个在 Xamarin Forms(用于 Google Play 商店)中,一个在 UWP(桌面和移动)中。我想实现一种用户可以使用第 3 方(最好是 Google)登录的方式,以便他可以从两个应用程序访问他的数据。我需要一种识别用户的方法。

我已经使用 Firebase 为 Xamarin Forms 应用程序实现了 Google 登录,它为我生成了一个 UserId。由于 UWP 尚未正式支持 Firebase,我尝试使用 OAuth2 来登录 Google,但在提供的 UserInfo 中,我看不到一种方法来识别我可以在两个应用程序中使用的用户。

下面是我从 OAuth2 获得的 UserInfo 的结构

{
  "sub": "somenumber",
  "name": "somename",
  "given_name": "someGivenName",
  "family_name": "someFamilyName",
  "profile": "https://plus.google.com/somenumber",
  "picture": "https://lh4.googleusercontent.com/-someURL.jpg",
  "gender": "someGender",
  "locale": "someCountry"
}

使用“sub”属性可能不好,因为用户可以更改它,Google 将放弃 G+。其他帐户值(例如用户名)也是如此。

我可以使用什么方法来成功识别两个应用程序中的用户?

编辑: 使用 Firebase 登录 Google 会给我用户的电子邮件地址(这是唯一的,不会更改)。所以我的挑战似乎是找到一种在 UWP 中使用谷歌帐户登录后获取用户电子邮件地址的方法。我发现的所有示例都指的是即将过时的 g+ api。

标签: xamarin.formsuwpfirebase-authenticationgoogle-signin

解决方案


我想我已经为我的问题找到了一个很好的解决方案,它也可以帮助处于相同情况的其他人:

因此,如果您想使用第三方登录并且您在所有平台上都没有相同的支持(即 Firebase 登录和 UWP),那么唯一关于用户的信息是唯一的,将来不会更改并且不依赖于在您正在使用的服务器上,是电子邮件地址。这可以用来识别用户。

让我们选择 Google 作为第三方登录:

对于 Xamarin Forms,与 Xamarin.Android 相比,第三方登录文档非常稀缺,但我在这里找到了一个非常好的教程。是的,它是用西班牙语写的,但谷歌浏览器会翻译得恰到好处。要获取电子邮件而不是生成的 ID,只需替换

MessagingCenter.Send(FirebaseAuthService.KEY_AUTH, FirebaseAuthService.KEY_AUTH, sg.IdToken);

MessagingCenter.Send(FirebaseAuthService.KEY_AUTH, FirebaseAuthService.KEY_AUTH, sg.Email);

确保您阅读了“使用您自己的凭据”段落中的所有说明 - 您必须在清单的协议方案中更改捆绑 ID。

现在,使用 UWP 获取 google 电子邮件地址:

同样,非常稀缺的文档。您需要从此处下载 .Net 的 Oauth2 示例。然后,在 OAuthUniversalApp 中,在发出第一个请求时,指定 scope=email,如下所示:

 string authorizationRequest = string.Format("{0}?response_type=code&scope=email%20profile&redirect_uri={1}&client_id={2}&state={3}&code_challenge={4}&code_challenge_method={5}",
                authorizationEndpoint,
                System.Uri.EscapeDataString(redirectURI), 
                clientID,
                state,
                code_challenge,
                code_challenge_method);

现在您在两个平台上都有 google 电子邮件,因此用户可以使用他的 Android 设备或 Windows PC 使用 google 登录。另一个重要的事情是让用户知道您可以访问电子邮件,如果您选择存储它,请使用加密算法,以避免安全问题。


推荐阅读