Я должен интегрировать 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, адрес электронной почты.Помогите пожалуйста ...