Xamarin.Android-Google登录崩溃

时间:2018-07-14 12:52:47

标签: android xamarin xamarin.android google-signin

我能够在我的Xamarin.Forms / Xamarin.Android应用中使用NuGet包Xamarin.GooglePlayServices.Auth(v60.1142.1)实施Google登录。 首次使用帐户弹出式窗口进行初始登录(请参阅LoginAsync()),然后在我的Xamarin.Forms App.cs中使用静默登录(请参见SilentLoginAsync())启动应用程序上的以下登录。但是,几分钟后,当我再次打开应用程序时,它立即崩溃了。我只看到启动屏幕一秒钟,然后崩溃了。我确定这与静默登录有关。

有什么想法吗?我也有一个问题,为什么Xamarin.Android中无法使用GoogleSignIn.getLastSignedInAccount(context)。似乎整个GoogleSignIn类都不见了。

public async Task<bool> SilentLoginAsync()
{
    //TODO: check why GoogleSignIn.getLastSignedInAccount(context) != null; does not work in Xamarin

    // it probably crashes here!
    var result = await Auth.GoogleSignInApi.SilentSignIn(apiClient).AsAsync<GoogleSignInResult>();
    signInAccount = result.SignInAccount;

    return result.IsSuccess && result.SignInAccount != null;
}

public Task<bool> LoginAsync()
{
    var tcs = new TaskCompletionSource<bool>();

    var googleCallback = new GoogleCallback()
    {
        HandleSuccess = (GoogleSignInResult loginResult) =>
        {
            signInAccount = loginResult.SignInAccount;
            tcs.SetResult(true);
        },
        HandleCancel = () => tcs.SetCanceled(),
    };

    MainActivity.CurrentActivity.GoogleCallbackManager.Callback = googleCallback;

    var signInIntent = Auth.GoogleSignInApi.GetSignInIntent(apiClient);
    MainActivity.CurrentActivity.StartActivityForResult(signInIntent, RC_SIGN_IN);

    return tcs.Task;
}

编辑


我在logcat中看到的异常如下:

Xamarin caused by: android.runtime.JavaProxyThrowable: System.NullReferenceException: Object reference not set to an instance of an object
Xamarin.Forms.Platform.Android.AppCompat.Platform.LayoutRootPage(Page page, int width, int height)<7999cc4bd5664eca8a72469344172ca3>:0
Xamarin.Forms.Platform.Android.AppCompat.Platform.Xamarin.Forms.Platform.Android.IPlatformLayout.OnLayout(bool changed, int l, int t, int r, int b)<7999cc4bd5664eca8a72469344172ca3>:0
Xamarin.Forms.Platform.Android.PlatformRenderer.OnLayout(bool changed, int l, int t, int r, int b)<7999cc4bd5664eca8a72469344172ca3>:0
Android.Views.ViewGroup.n_OnLayout_ZIIII(IntPtr jnienv, IntPtr native__this, bool changed, int l, int t, int r, int b)<ff199c98c3f84852925dd37a0ef6113a>:0
at (wrapper dynamic-method) System.Object.9f75f64b-ae6a-4c2f-a4a8-9e33dca4e092(intptr,intptr,bool,int,int,int,int)
md5b60ffeb829f638581ab2bb9b1a7f4f3f.PlatformRenderer.n_onLayout(Native Method)
md5b60ffeb829f638581ab2bb9b1a7f4f3f.PlatformRenderer.onLayout()PlatformRenderer.java:63
android.view.View.layout()View.java:19659
android.view.ViewGroup.layout()ViewGroup.java:6075
android.widget.RelativeLayout.onLayout()RelativeLayout.java:1083
android.view.View.layout()View.java:19659
android.view.ViewGroup.layout()ViewGroup.java:6075
android.widget.FrameLayout.layoutChildren()FrameLayout.java:323
android.widget.FrameLayout.onLayout()FrameLayout.java:261
android.view.View.layout()View.java:19659
android.view.ViewGroup.layout()ViewGroup.java:6075
android.widget.LinearLayout.setChildFrame()LinearLayout.java:1791
android.widget.LinearLayout.layoutVertical()LinearLayout.java:1635
android.widget.LinearLayout.onLayout()LinearLayout.java:1544
android.view.View.layout()View.java:19659
android.view.ViewGroup.layout()ViewGroup.java:6075
android.widget.FrameLayout.layoutChildren()FrameLayout.java:323
android.widget.FrameLayout.onLayout()FrameLayout.java:261
com.android.internal.policy.DecorView.onLayout()DecorView.java:761
android.view.View.layout()View.java:19659
android.view.ViewGroup.layout()ViewGroup.java:6075
android.view.ViewRootImpl.performLayout()ViewRootImpl.java:2496
android.view.ViewRootImpl.performTraversals()ViewRootImpl.java:2212
android.view.ViewRootImpl.doTraversal()ViewRootImpl.java:1392
android.view.ViewRootImpl$TraversalRunnable.run()ViewRootImpl.java:6752
android.view.Choreographer$CallbackRecord.run()Choreographer.java:911
android.view.Choreographer.doCallbacks()Choreographer.java:723
android.view.Choreographer.doFrame()Choreographer.java:658
android.view.Choreographer$FrameDisplayEventReceiver.run()Choreographer.java:897
android.os.Handler.handleCallback()Handler.java:790
android.os.Handler.dispatchMessage()Handler.java:99
android.os.Looper.loop()Looper.java:164
android.app.ActivityThread.main()ActivityThread.java:6494
java.lang.reflect.Method.invoke(Native Method)
com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run()RuntimeInit.java:438
com.android.internal.os.ZygoteInit.main()ZygoteInit.java:807

编辑2:


App.xaml.cs

public partial class App : Application
{

    public App()
    {
        InitializeComponent();
    }

    public async Task StartAsync()
    {
        if (await GoogleAccount.SilentLoginAsync())
        {
            MainPage = new MainPage();
        }
        else
        {
            MainPage = new NavigationPage(new LoginPage { ViewModel = new LoginViewModel() });
        }
    }

    protected async override void OnStart()
    {
        OnResume();

        await StartAsync();
    }

    // ...
}

0 个答案:

没有答案