2017-04-19 60 views

回答

1

我們該如何渲染xamarin.Android中的google登錄按鈕才能在xamarin表單應用程序中呈現。有沒有什麼辦法可以在不使用xamarin表單中的Auth url的情況下實現它。

我不確定您的「Auth Url」是否指示哪種方法進行身份驗證。

通過android應用,我們可以使用谷歌SDK來實現這一點。使用GoogleApiClient將Google登錄集成到我們的應用中,首先我們需要將包Xamarin.GooglePlayServices.Basement,Xamarin.GooglePlayServices.AuthXamarin.GooglePlayServices.Identity安裝到您的Android項目中,然後您可以查看此官方文檔:Integrating Google Sign-In into Your Android App

由於您使用Xamarin.Forms,你可以這樣創建例如自定義登錄按鈕:

public class MySignInButton : Button 
{ 
} 

而且渲染這樣的:

[assembly: ExportRenderer(typeof(MySignInButton), typeof(SignInButtonRenderer))] 

namespace GoogleSignInApp.Droid 
{ 
    public class SignInButtonRenderer : Xamarin.Forms.Platform.Android.ButtonRenderer 
    { 
     protected override void OnElementChanged(ElementChangedEventArgs<Xamarin.Forms.Button> e) 
     { 
      base.OnElementChanged(e); 
      if (e.NewElement != null) 
      { 
       if (Control != null) 
       { 
        var gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DefaultSignIn) 
           .RequestEmail() 
           .Build(); 

        var mGoogleApiClient = new GoogleApiClient.Builder((FormsAppCompatActivity)Forms.Context) 
         .EnableAutoManage((FormsAppCompatActivity)Forms.Context, new OnConnectionFailedListener()) 
         .AddApi(Android.Gms.Auth.Api.Auth.GOOGLE_SIGN_IN_API) 
         .Build(); 
        Control.Click += (sender, ee) => 
        { 
         var signInIntent = Android.Gms.Auth.Api.Auth.GoogleSignInApi.GetSignInIntent(mGoogleApiClient); 
         ((FormsAppCompatActivity)Forms.Context).StartActivityForResult(signInIntent, 9001); 
        }; 
       } 
      } 
     } 
    } 

    public class OnConnectionFailedListener : Java.Lang.Object, IOnConnectionFailedListener 
    { 
     public void OnConnectionFailed(ConnectionResult result) 
     { 
      Log.Debug("error", "error"); 
     } 
    } 
} 

在XAML中,可以使用該按鈕是這樣的:

<local:MySignInButton Text="Sign In" /> 

不要忘記在Android項目的清單中添加<activity android:name="com.google.android.gms.auth.api.signin.internal.SignInHubActivity" />

我在這裏使用自定義渲染器,因爲您要求在您的問題中呈現登錄按鈕,我想您可能還需要樣式按鈕或類似的東西,否則使用DependencyService將在這種情況下更專業我的想法是。

並且不要忘記實施你的MainActivity的android項目的OnActivityResult。如果還有其他問題,請發表評論。

+0

謝謝,我會試試這個.. –

+0

@Grace Feng - 尋找困難,在OnActivityResult中實現什麼。你能在Github上發佈一個示例代碼,以便其他人可以參考嗎? –

+0

@ MobleJoseph,只需查看[官方文檔](https://developers.google.com/identity/sign-in/android/sign-in),Xamarin.Android也有類似的實現。 –