如何在 Xamarin iOS 中使用 GoogleSignIn(使用 firebase)

2024-03-05

我想在我的身份验证服务的 iOS 实现中使用它。很难找到示例,而且它们也不容易转换为 Xamarin。


这对我来说是这样的:

using GIDSignIn = Google.SignIn.SignIn;

static async Task<SignInDelegateEventArgs> GoogleSignInAsync()
{
    var tcs = new TaskCompletionSource<SignInDelegateEventArgs>();
    void Handler(object sender, SignInDelegateEventArgs args) => tcs.SetResult(args);

    var vc = UIApplication.SharedApplication.KeyWindow?.RootViewController ?? throw new Exception("ViewController not found");
    GIDSignIn.SharedInstance.PresentingViewController = vc;
    GIDSignIn.SharedInstance.Disconnected += Handler;
    GIDSignIn.SharedInstance.SignedIn += Handler;

    try
    {
        GIDSignIn.SharedInstance.SignInUser();
        return await tcs.Task;
    }
    finally
    {
        GIDSignIn.SharedInstance.SignedIn -= Handler;
        GIDSignIn.SharedInstance.Disconnected -= Handler;
    }
}

由于这是事件驱动的,所以我放了一个TaskCompletionSource周围,​​这样您就可以轻松等待结果(加上 Firebase 的奖励代码):

var signInResult = await GoogleSignInAsync();
Console.WriteLine($@"{signInResult.Error} {signInResult.User?.Profile.Email}");

if (signInResult.Error != null || signInResult.User == null)
    throw new GoogleSignInCanceledException(signInResult.Error.ToString());

// ReSharper disable once HeuristicUnreachableCode
var credential = GoogleAuthProvider.GetCredential(signInResult.User.Authentication.IdToken, signInResult.User.Authentication.AccessToken);
var authResult = await Auth.DefaultInstance.SignInWithCredentialAsync(credential);
AuthToken = await authResult.User.GetIdTokenAsync();

将此包含在AppDelegate.FinishedLaunching():

var googleServiceDictionary = NSDictionary.FromFile("GoogleService-Info.plist");
GIDSignIn.SharedInstance.ClientId = googleServiceDictionary["CLIENT_ID"].ToString();

将此包含在Info.plist:

<!-- Google Sign-in Section -->
<key>CFBundleURLTypes</key>
<array>
    <dict>
        <key>CFBundleTypeRole</key>
        <string>Editor</string>
        <key>CFBundleURLSchemes</key>
        <array>
            <!-- Copied from GoogleService-Info.plist key REVERSED_CLIENT_ID -->
            <string>com.googleusercontent.apps.123-321</string>
        </array>
    </dict>
</array>
<!-- End of the Google Sign-in Section -->

有什么改进吗?我很高兴收到你的来信。或者您正在寻找安卓实现 https://stackoverflow.com/a/73296776/1855801?

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Xamarin iOS 中使用 GoogleSignIn(使用 firebase) 的相关文章

随机推荐