- Microsoft.Identity.Client
< li>System.Net.Http.Json.
Код: Выделить всё
public class GoogleAuthService
{
private readonly IPublicClientApplication _pca;
public GoogleAuthService()
{
_pca = PublicClientApplicationBuilder.Create("OAuth 2.0 client ID")
.WithRedirectUri("com.googleusercontent.apps.OAuth 2.0 client ID:/oauth2redirect")
.Build();
}
public async Task AuthenticateAsync()
{
try
{
// Scopes for accessing Google APIs
string[] scopes = { "https://www.googleapis.com/auth/androidpublisher" };
var result = await _pca.AcquireTokenInteractive(scopes)
.WithParentActivityOrWindow(MainActivity.CurrentActivity)
.ExecuteAsync();
Console.WriteLine($"GoogleAPIAccessToken: {result.AccessToken}");
return result.AccessToken; // Use this access token for API calls
}
catch (Exception ex)
{
// Handle authentication errors
Console.WriteLine($"Authentication failed: {ex.Message}");
return null;
}
}
}
Код: Выделить всё
public static MainActivity CurrentActivity { get; private set; }
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
CurrentActivity = this;
Instance = this;
}
protected override void OnActivityResult(int requestCode, Result resultCode, Intent data)
{
base.OnActivityResult(requestCode, resultCode, data);
AuthenticationContinuationHelper.SetAuthenticationContinuationEventArgs(requestCode, resultCode, data);
}
Код: Выделить всё
Код: Выделить всё
private readonly GoogleAuthService _googleAuthService;
_googleAuthService = new GoogleAuthService();
public async void LoginButtonClicked(Object sender, EventArgs e)
{
string token = await _googleAuthService.AuthenticateAsync();
}
< blockquote>
Мы не можем выполнить ваш запрос
unauthorized_client: клиент не существует или не доступен для потребителей. Если вы являетесь разработчиком приложения, настройте новое приложение с помощью регистрации приложений на портале Azure по адресу https://go.microsoft.com/fwlink/?linkid=2083908.
Снимок экрана:
[img]https:/ /i.sstatic.net/65A3cT1B.jpg[/img]
Обновление:
Я попробовал другой способ реализации Поток OAuth в проекте MAUI. При создании идентификатора клиента OAuth 2.0 мы можем загрузить учетные данные OAuth в виде файла JSON (client_secrets.json). Я добавил этот файл JSON в проект MAUI в папке «Платформы» Android. После добавления файла JSON я установил для параметра «Действие сборки» значение «Содержимое», а для параметра «Копировать в выходной каталог» — значение «Копировать всегда» в свойствах этого файла JSON. Затем я добавил следующие функции.
Код: Выделить всё
public class GoogleAuthService
{
private static readonly string[] Scopes = { "https://www.googleapis.com/auth/androidpublisher" };
private const string ApplicationName = "AlertBuddies";
public async Task AuthenticateAsync()
{
try
{
using (var stream = await FileSystem.OpenAppPackageFileAsync("Platforms/Android/client_secret.json"))
{
var credPath = Path.Combine(FileSystem.AppDataDirectory, "token.json");
var credential = await GoogleWebAuthorizationBroker.AuthorizeAsync(
GoogleClientSecrets.Load(stream).Secrets,
Scopes,
"user",
CancellationToken.None,
new FileDataStore(credPath, true));
Console.WriteLine($"GoogleAPIAccessToken: {credential.Token.AccessToken}");
return credential;
}
}
catch (Exception ex)
{
Console.WriteLine($"Authentication failed: {ex.Message}");
return null;
}
}
}
Код: Выделить всё
Код: Выделить всё
public async void LoginButtonClicked(Object sender, EventArgs e)
{
var credential = await _googleAuthService.AuthenticateAsync();
if (credential != null)
{
var token = credential.Token.AccessToken;
}
}
Ошибка аутентификации: Android/client_secret.json
Поэтому я не могу сгенерировать токен аутентификации с помощью OAuth 2.0. Правильный ли этот процесс? Как сгенерировать токен аутентификации с помощью OAuth 2.0 для вызова Google Developer API из мобильного приложения .NET MAUI для получения статуса подписки из Google Play Store?
Предложите, пожалуйста, решение этой проблемы.
Подробнее здесь: https://stackoverflow.com/questions/790 ... -developer
Мобильная версия