Xamarin Forms Google Sign In проблема - PullRequest
0 голосов
/ 26 ноября 2018

Я должен интегрировать Google Sign в свой проект.Я перешел по этой ссылке https://www.pujolsluis.com/google-client-plugin-for-xamarin/.Я не могу получить имя пользователя Google, адрес электронной почты, изображение.

xaml:

<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:converter="clr-namespace:login2"
             x:Class="login2.MainPage">

    <ContentPage.Resources>
        <ResourceDictionary>
            <converter:InvertBooleanConverter x:Key="InvertBooleanConverter"/>
        </ResourceDictionary>
    </ContentPage.Resources>
    <ContentPage.Content>
        <StackLayout HorizontalOptions="FillAndExpand" VerticalOptions="FillAndExpand">

            <Label Text="Welcome to Google Client App!"
                   HorizontalOptions="CenterAndExpand" VerticalOptions="Start"
                   FontSize="20"
                   TextColor="#212121"
                   Margin="0,32,0,0"/>

            <StackLayout HorizontalOptions="FillAndExpand" VerticalOptions="CenterAndExpand">
                <Image HorizontalOptions="Center" VerticalOptions="Center"
                       WidthRequest="120" HeightRequest="120"
                       Margin="24"
                       Source="googlelogo.png"
                       IsVisible="{Binding IsLoggedIn, Converter={StaticResource InvertBooleanConverter}}"/>

                <StackLayout Orientation="Horizontal"
                             HorizontalOptions="FillAndExpand"
                             VerticalOptions="CenterAndExpand"
                             IsVisible="{Binding IsLoggedIn}">
                    <Image WidthRequest="120"
                           HeightRequest="120"
                           Source="{Binding User.Picture}"
                           IsVisible="{Binding IsLoggedIn}"/>
                    <StackLayout Orientation="Vertical"
                                 Spacing="8"
                                 IsVisible="{Binding IsLoggedIn}"
                                 Margin="16,0,0,0">
                        <Label Text="Name:"
                               TextColor="#212121"
                               FontSize="16"/>
                        <Label Text="{Binding User.Name}"
                               Margin="16,0,0,0"/>
                        <Label Text="Email:"
                               TextColor="#212121"
                               FontSize="16"/>
                        <Label Text="{Binding User.Email}"
                               Margin="16,0,0,0"/>
                    </StackLayout>
                </StackLayout>
            </StackLayout>

            <Button Text="Login"
                    VerticalOptions="EndAndExpand"
                    IsVisible="{Binding IsLoggedIn, Converter={StaticResource InvertBooleanConverter}}"
                    Command="{Binding LoginCommand}"
                    BackgroundColor="Accent"/>

            <Button Text="Logout"
                    VerticalOptions="EndAndExpand"
                    IsVisible="{Binding IsLoggedIn}"
                    Command="{Binding LogoutCommand}"
                    BackgroundColor="Accent"/>
        </StackLayout>
    </ContentPage.Content>
</ContentPage>

viewmodel:

internal class LoginPageViewModel : INotifyPropertyChanged
    {            
        public GoogleUser User { get; set; } = new GoogleUser();
        public string Name
        {
            get => User.Name;
            set => User.Name = value;
        }
        public string Email
        {
            get => User.Email;
            set => User.Email = value;
        }
        public Uri Picture
        {
            get => User.Picture;
            set => User.Picture = value;
        }
        public bool IsLoggedIn { get; set; }
        public ICommand LoginCommand { get; set; }
        public ICommand LogoutCommand { get; set; }
        public readonly IGoogleClientManager googleClientManager;
        public event PropertyChangedEventHandler PropertyChanged;

        public LoginPageViewModel()
        {
            LoginCommand = new Command(LoginAsync1);
            LogoutCommand = new Command(Logout);
            googleClientManager = CrossGoogleClient.Current;
            IsLoggedIn = false;

        }
        public void LoginAsync1()
        {
            googleClientManager.LoginAsync();
            googleClientManager.OnLogin += OnLoginCompleted;
        }
        public void OnLoginCompleted(object s, GoogleClientResultEventArgs<GoogleUser> loginEventArgs)
        {
            if (loginEventArgs.Data != null)
            {
                GoogleUser googleUser = loginEventArgs.Data;

                User.Name = googleUser.Name;
                User.Email = googleUser.Email;
                User.Picture = googleUser.Picture;
                // Log the current User email
                Debug.WriteLine(User.Email);
                IsLoggedIn = true;
            }
            else
            {
                App.Current.MainPage.DisplayAlert("Error", loginEventArgs.Message, "OK");
            }
            googleClientManager.OnLogin -= OnLoginCompleted;
        }

        public void Logout()
        {
            googleClientManager.OnLogout += OnLogoutCompleted;
            googleClientManager.Logout();
        }

        private void OnLogoutCompleted(object sender, EventArgs loginEventArgs)
        {
            IsLoggedIn = false;
            User.Email = "Offline";
            googleClientManager.OnLogout -= OnLogoutCompleted;
        }
    }

Манифест:

<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="1" android:versionName="1.0" package="sample.com.login2" android:installLocation="auto">
    <uses-sdk android:minSdkVersion="21" android:targetSdkVersion="27" />
    <uses-permission android:name="android.permission.INTERNET" />
    <application android:label="login2.Android"></application>
</manifest>

google_service.json:

{
  "project_info": {
    "project_number": "40263391396",
    "firebase_url": "https://sign-e2687.firebaseio.com",
    "project_id": "sign-e2687",
    "storage_bucket": "sign-e2687.appspot.com"
  },
  "client": [
    {
      "client_info": {
        "mobilesdk_app_id": "1:40263391396:android:8d889062d8a9f088",
        "android_client_info": {
          "package_name": "sample.com.login2"
        }
      },
      "oauth_client": [
        {
          "client_id": "40263391396-es3vupbblfrulkup9rtd43sjdmoca7rn.apps.googleusercontent.com",
          "client_type": 1,
          "android_info": {
            "package_name": "sample.com.login2",
            "certificate_hash": "6b5f4cfc5a249bac9cc88be5612e05dea6a11d65"
          }
        },
        {
          "client_id": "40263391396-db2cttbdftmjplcj1bej937eusjfv02g.apps.googleusercontent.com",
          "client_type": 3
        }
      ],
      "api_key": [
        {
          "current_key": "AIzaSyCCBrHGY89NSPa83YudpKDIwCn_n6x1Zjo"
        }
      ],
      "services": {
        "analytics_service": {
          "status": 1
        },
        "appinvite_service": {
          "status": 2,
          "other_platform_oauth_client": [
            {
              "client_id": "40263391396-db2cttbdftmjplcj1bej937eusjfv02g.apps.googleusercontent.com",
              "client_type": 3
            }
          ]
        },
        "ads_service": {
          "status": 2
        }
      }
    }
  ],
  "configuration_version": "1"
}

MainActivity:

protected override void OnCreate(Bundle savedInstanceState)
        {
            TabLayoutResource = Resource.Layout.Tabbar;
            ToolbarResource = Resource.Layout.Toolbar;

            base.OnCreate(savedInstanceState);
            GoogleClientManager.Initialize(this);
            global::Xamarin.Forms.Forms.Init(this, savedInstanceState);
            LoadApplication(new App());
        }
        protected override void OnActivityResult(int requestCode, Result resultCode, Android.Content.Intent data)
        {
            base.OnActivityResult(requestCode, resultCode, data);
            GoogleClientManager.OnAuthCompleted(requestCode, resultCode, data);
        }

Я добавил приложение в firebase.После выбора учетной записи в приложении ничего не происходит.Отладка не идет в OnLoginCompleted(object s, GoogleClientResultEventArgs<GoogleUser> loginEventArgs) метод. Не получить имя Google, адрес электронной почты.Помогите пожалуйста ...

1 Ответ

0 голосов
/ 26 ноября 2018

Я не поставил сертификат подписи отладки SHA-1, пока вижу опцию при добавлении приложения в firebase.Теперь я ввел это правильно и работает отлично ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...