Я пытаюсь использовать API Google Fit History, и у меня возникает проблема, когда после того, как я запрашиваю у пользователя свою учетную запись Google, используя ConnectionResult.StartResolutionForResult, я ВСЕГДА получаю код возврата ОТМЕНА, даже если пользователь выбирает учетную запись в диалоговом окне. Насколько я могу судить по следующему адресу (https://developers.google.com/fit/android/get-api-key). У меня есть проект на консоли разработчиков. Я включил API-интерфейс Fitness в консоли. И я создал идентификатор клиента, используя хранилище отладки на моей машине разработки. Вот несколько скриншотов из консоли разработчика: Клиент API Google OAuth всегда возвращается Отменен
Я программирования в Xamarin.Android и последовал примеру здесь. (Обратите внимание, что у меня есть установленный Xamarin.GooglePlayServices.Fitness пакет): https://github.com/xamarin/monodroid-samples/tree/master/google-services/Fitness/BasicHistoryApi
Вот основные направления кода:
mClient = new GoogleApiClient.Builder (this)
.AddApi (FitnessClass.HISTORY_API)
.AddScope (new Scope (Scopes.FitnessActivityReadWrite))
.AddConnectionCallbacks (clientConnectionCallback)
.AddOnConnectionFailedListener (result => {
Log.Info (TAG, "Connection failed. Cause: " + result);
if (!result.HasResolution) {
// Show the localized error dialog
GooglePlayServicesUtil.GetErrorDialog (result.ErrorCode, this, 0).Show();
return;
}
// The failure has a resolution. Resolve it.
// Called typically when the app is not yet authorized, and an
// authorization dialog is displayed to the user.
if (!authInProgress) {
try {
Log.Info (TAG, "Attempting to resolve failed connection");
authInProgress = true;
result.StartResolutionForResult (this, REQUEST_OAUTH);
} catch (IntentSender.SendIntentException e) {
Log.Error (TAG, "Exception while starting resolution activity", e);
}
}
}).Build();
...
protected override void OnActivityResult (int requestCode, Result resultCode, Intent data)
{
if (requestCode == REQUEST_OAUTH) {
authInProgress = false;
if (resultCode == Result.Ok) {
// Make sure the app is not already connected or attempting to connect
if (!mClient.IsConnecting && !mClient.IsConnected) {
mClient.Connect();
}
}
}
}
OnFailedConnectionListener является получив вызов с statusCode = SIGN_IN_REQUIRED, который затем вызывает вызов StartResolutionForResult и открывает диалоговое окно для выбора пользователем своей учетной записи Google. Как только появится диалоговое окно, я получаю следующую ошибку в своем LogCat. Обратите внимание, что это происходит до того, как они выберут учетную запись.
02-26 15:56:36.459: E/MDM(17800): [63567] b.run: Couldn't connect to Google API client: ConnectionResult{statusCode=API_UNAVAILABLE, resolution=null, message=null}
После того как пользователь выбирает учетную запись, OnActivityResult вызывается и ResultCode всегда «Отменено», который должен указать пользователь отклонил диалог, но это, конечно, не то, что здесь произошло. Любая помощь? Он пахнет чем-то не так в консоли разработчика, но, пройдя через руководство 100 раз с теми же результатами, я начинаю сходить с ума.
Вы добавили сертификат в андроид-ключ? http://stackoverflow.com/questions/30650231/couldnt-connect-to-google-api-client второй anser – Gusman