0

Ich lerne Xamarin Android, und ich möchte Google SignIn implementieren ... Aber ich bin nicht in der Lage, das zu tun. Ich muss nur die Client-ID verwenden? Ich fange einige Beispiele im Internet, aber nichts funktioniert ... Kann jemand ein Beispiel geben? oder Schritt für Schritt, wie ich das in Xamarin machen kann?Xamarin Android Google Plus Anmeldung

Vielen Dank!

Mein Code:

using Android.App; 
using Android.Widget; 
using Android.OS; 
using Android.Gms.Common.Apis; 
using Android.Gms.Common; 
using System; 
using Android.Gms.Plus; 
using Android.Content; 
using Android.Runtime; 
using Android.Gms.Plus.Model.People; 

namespace LoginGoogle 
{ 
    [Activity(Label = "LoginGoogle", MainLauncher = true, Icon = "@drawable/icon")] 
    public class MainActivity : Activity, GoogleApiClient.IConnectionCallbacks, 
     GoogleApiClient.IOnConnectionFailedListener 

{ 
    private GoogleApiClient googleApiClient; 
    private SignInButton btnGooglePlus; 
    private ConnectionResult connectionResult; 
    private bool intentProgress; 
    private bool signInClick; 
    private bool infoPopulated; 

    private TextView lblName; 
    private TextView lblTagLine; 
    private TextView lblBraggingRights; 
    private TextView lblGender; 
    private TextView lblRelationship; 

    protected override void OnCreate(Bundle bundle) 
    { 
     base.OnCreate(bundle); 

     // Set our view from the "main" layout resource 
     SetContentView (Resource.Layout.Main); 

     btnGooglePlus = FindViewById<SignInButton>(Resource.Id.btnGooglePlus); 

     btnGooglePlus.Click += btnGooglePlus_Click; 

     lblName = FindViewById<TextView>(Resource.Id.lblName); 
     lblTagLine = FindViewById<TextView>(Resource.Id.lblTagLine); 
     lblBraggingRights = FindViewById<TextView>(Resource.Id.lblBraggingRights); 
     lblGender = FindViewById<TextView>(Resource.Id.lblGender); 
     lblRelationship = FindViewById<TextView>(Resource.Id.lblRelationship); 

     GoogleApiClient.Builder builder = new GoogleApiClient.Builder(this); 
     builder.AddConnectionCallbacks(this); 
     builder.AddOnConnectionFailedListener(this); 
     builder.AddApi(PlusClass.API); 
     builder.AddScope(PlusClass.ScopePlusProfile); 
     builder.AddScope(PlusClass.ScopePlusLogin); 
     //Build our GoogleApiClient 
     googleApiClient = builder.Build(); 

    } 

    void btnGooglePlus_Click(object sender, EventArgs e) 
    { 
     if (!googleApiClient.IsConnecting) 
     { 
      signInClick = true; 
      resolveSigInError(); 
     } 
    } 

    private void resolveSigInError() 
    { 
     if (!googleApiClient.IsConnected) 
     { 
      //No need to resolve errors 
      return; 
     } 

     if (connectionResult.HasResolution) 
     { 
      try 
      { 
       intentProgress = true; 
       StartIntentSenderForResult(connectionResult.Resolution.IntentSender, 0, null, 
        0, 0, 0); 
      } catch (Android.Content.IntentSender.SendIntentException e) 
      { 
       intentProgress = false; 
       googleApiClient.Connect(); 
      } 

     } 
    } 

    protected override void OnActivityResult(int requestCode, 
     [GeneratedEnum] Result resultCode, Intent data) 
    { 
     if(requestCode == 0) 
     { 
      if(resultCode != Result.Ok) 
      { 
       signInClick = false; 
      } 

      intentProgress = false; 
      if (googleApiClient.IsConnecting) 
      { 
       googleApiClient.Connect(); 
      } 
     } 
    } 

    protected override void OnStart() 
    { 
     base.OnStart(); 
     googleApiClient.Connect(); 
    } 

    protected override void OnStop() 
    { 
     base.OnStop(); 
     if (googleApiClient.IsConnected) 
     { 
      googleApiClient.Disconnect(); 
     } 

    } 

    public void OnConnected(Bundle connectionHint) 
    { 
     //Successful login 
     signInClick = false; 

     if (PlusClass.PeopleApi.GetCurrentPerson(googleApiClient) != null) 
     { 
      IPerson plusUser = PlusClass.PeopleApi.GetCurrentPerson(googleApiClient); 

      if (plusUser.HasDisplayName) 
      { 
       lblName.Text += plusUser.DisplayName; 
      } 

      if (plusUser.HasTagline) 
      { 
       lblTagLine.Text += plusUser.Tagline; 
      } 

      if (plusUser.HasBraggingRights) 
      { 
       lblBraggingRights.Text += plusUser.BraggingRights; 
      } 

      { 
       switch (plusUser.RelationshipStatus) 
       { 
        case 0: 
         lblRelationship.Text += "Single"; 
         break; 

        case 1: 
         lblRelationship.Text += "In a relationship"; 
         break; 

        case 2: 
         lblRelationship.Text += "Engaged"; 
         break; 

        case 3: 
         lblRelationship.Text += "Married"; 
         break; 

        case 4: 
         lblRelationship.Text += "It's complicated"; 
         break; 

        case 5: 
         lblRelationship.Text += "In an open relationship"; 
         break; 

        case 6: 
         lblRelationship.Text += "Widowed"; 
         break; 

        case 7: 
         lblRelationship.Text += "In a domestic partnership"; 
         break; 

        case 8: 
         lblRelationship.Text += "In a civil union"; 
         break; 

        default: 
         lblRelationship.Text += "Unknown"; 
         break; 
       } 
      } 

      if (plusUser.HasGender) 
      { 
       switch (plusUser.Gender) 
       { 
        case 0: 
         lblGender.Text += "Male"; 
         break; 

        case 1: 
         lblGender.Text += "Female"; 
         break; 

        case 2: 
         lblGender.Text += "Other"; 
         break; 

        default: 
         lblGender.Text += "Unknown"; 
         break; 
       } 

       infoPopulated = true; 
      } 
     } 



    } 

    public void OnConnectionSuspended(int cause) 
    { 
     throw new NotImplementedException(); 
    } 

    public void OnConnectionFailed(ConnectionResult result) 
    { 
     if (intentProgress) 
     { 
      //Store the ConnectionResult so that we can use it later when the user 
      //clicks 'sign in' 
      connectionResult = result; 

      if (signInClick) 
      { 
       //The user has already clicked 'signin' so we attempt to resolve all 
       //errors until the user is signed in 
       resolveSigInError(); 
      } 

     } 


    } 
} 

}

enter code here 

Antwort

1

Bitte beachten Sie die xamarin sample für Google-Zeichen in In diesem Beispiel müssen Sie nicht Client-ID.. Weitere Informationen zu Google-Anmeldedaten finden Sie in der Google-Entwicklung document.

ich fangen einige Beispiele in Internet aber nichts funktioniert ...

Ich glaube, Sie die App nicht genehmigt wurden, können.

Laden Sie das Beispiel herunter und stellen Sie sicher, dass Sie die App vor der Verwendung in der Google Developers Console autorisiert haben.

Die App

    Autorisierte
  1. öffnen link.

  2. Erstellen Sie Ihren Projektnamen (was auch immer Sie schreiben) und fügen Sie den Paketnamen dafür hinzu. In diesem Beispiel lautet der Paketname com.xamarin.signinquickstart.

  3. Holen Sie sich Ihre SHA-1 bitte beziehen Sie sich auf diese link.

  4. Erstellen und implementieren Sie die Demo-App und melden Sie sich mit einem Google-Konto an.

Bildschirmfoto:

enter image description here

aber ich bin nicht in der Lage sein, das zu tun. Ich muss nur die Client-ID verwenden?

Wie die Client-ID-Login verwenden auf

Laut Google document. Ich glaube, Sie können versuchen, mit Client-ID einzuloggen von:

GoogleSignInOptions gso = new  GoogleSignInOptions.Builder(GoogleSignInOptions.DefaultSignIn) 
      .RequestIdToken("YOUR_CLIENT_ID") 
      .RequestEmail() 
      .Build(); 
mGoogleApiClient = new GoogleApiClient.Builder (this) 
    .EnableAutoManage(mLoginFragment, failedHandler) 
    .AddApi (Auth.GOOGLE_SIGN_IN_API,gso) 
    .Build() 
+0

Es gibt auch ein Video-Tutorial, das Ihnen helfen kann - [Xamarin Android Tutorial 36 Google+ Anmelden Part 1] (https://www.youtube.com/watch? v = 3wH-g59JfFY) und [Xamarin Android Tutorial 37 Google+ Anmelden Teil 2] (https://www.youtube.com/watch?v=GKoXQTFCWuE). Hoffe das hilft. –

Verwandte Themen