2016-02-26 2 views
4

Я пытаюсь использовать API Google Fit History, и у меня возникает проблема, когда после того, как я запрашиваю у пользователя свою учетную запись Google, используя ConnectionResult.StartResolutionForResult, я ВСЕГДА получаю код возврата ОТМЕНА, даже если пользователь выбирает учетную запись в диалоговом окне. Насколько я могу судить по следующему адресу (https://developers.google.com/fit/android/get-api-key). У меня есть проект на консоли разработчиков. Я включил API-интерфейс Fitness в консоли. И я создал идентификатор клиента, используя хранилище отладки на моей машине разработки. Вот несколько скриншотов из консоли разработчика: Screenshot of API enabled in developer console Screenshot of OAuth Client ID in developer consoleКлиент 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 раз с теми же результатами, я начинаю сходить с ума.

+0

Вы добавили сертификат в андроид-ключ? http://stackoverflow.com/questions/30650231/couldnt-connect-to-google-api-client второй anser – Gusman

ответ

3

Итак, моя проблема заключалась в том, что я использовал неправильный debug.keystore. На моем Mac установлены Android Studio и Xamarin Studio. Я неправильно предположил, что Xamarin использовал «~/.android/debug.keystore», но оказывается, что они помещают их в «~/.local/share/Xamarin/Mono для Android/debug.keystore», меняя на использование SHA1 из этого ключа исправлена ​​моя проблема. Для моей информации по клавишам Xamarin: https://developer.xamarin.com/guides/android/deployment,_testing,_and_metrics/MD5_SHA1/#OSX