2017-04-19 3 views

Antwort

1

Wie können wir die google anmelden Schaltfläche in Xamarin.Android in xamarin Formen Anwendung gerendert werden. Gibt es eine Möglichkeit, dies zu erreichen, ohne die Auth-URL in Xamarin-Formularen zu verwenden?

Ich bin nicht sicher, dass Ihre "Auth Url" angibt, welche Methode für die Authentifizierung.

Mit Android-App können wir Google SDK verwenden, um dies zu erreichen. Mit GoogleApiClient, um Google Sign-In in unsere App zu integrieren, müssen wir zuerst das Paket Xamarin.GooglePlayServices.Basement, Xamarin.GooglePlayServices.Auth und Xamarin.GooglePlayServices.Identity in Ihrem Android-Projekt installieren, und dann können Sie sich dieses offizielle Dokument ansehen: .

public class MySignInButton : Button 
{ 
} 

Und Renderer wie folgt aus::

Da Sie Xamarin.Forms verwenden, können Sie Ihre benutzerdefinierten Anmeldeschaltfläche zum Beispiel wie folgt erstellen

[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"); 
     } 
    } 
} 

In XAML Sie Über diese Schaltfläche wie folgt verwenden:

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

vergessen Sie nicht hinzufügen <activity android:name="com.google.android.gms.auth.api.signin.internal.SignInHubActivity" /> in Manifest des Android-Projekts.

Ich bin hier Custom Renderer verwenden, weil Sie fragen, für das Rendern einer Schaltfläche in Ihrer Frage, ich denke, Sie müssen auch Ihre Schaltfläche oder etwas ähnliches, sonst mit DependencyService wird professioneller in diesem Szenario sein meiner Meinung nach.

Und vergessen Sie nicht, die OnActivityResult Ihrer MainActivity von Android-Projekt zu implementieren. Bei weiteren Fragen hinterlassen Sie bitte einen Kommentar.

+0

Danke ich werde dies ausprobieren .. –

+0

@Grace Feng - Find hart, was in der OnActivityResult implementieren. Können Sie in Github einen Beispielcode posten, damit andere darauf verweisen können? –

+0

@MobleJoseph, überprüfen Sie einfach das [offizielle Dokument] (https://developers.google.com/identity/sign-in/android/sign-in), Xamarin.Android hat ähnliche Implementierung. –