Как узнать, есть ли у владельца учетной записи Google канал Youtube (связан)?

Согласно документации Google, любой владелец учетной записи Google также является владельцем учетной записи Youtube, но он может не быть «связанным», т.е. иметь канал Youtube. Приложение может загружать видео только в связанную учетную запись.

Если вы используете AccountManager для получения списка владельцев учетных записей Google, в этот момент вы не можете сказать, связан ли кто-либо из них или нет. Мне нужен способ узнать, связано ли это.

Кажется, нет прямого вызова API Youtube, чтобы узнать, есть ли у учетной записи канал (связан).

Возможно, для этого можно было бы переназначить следующий фрагмент кода:

  List<String> scopes = new ArrayList<>();
  scopes.add(       SendToGoogleUtils."https://www.googleapis.com/auth/youtube.upload" );
  if( ( googleAccountCredential = SendToGoogleUtils.getGoogleAccountCredential(
    mContext, accountYoutube.name, scopes ) ) == null) return;
  String gAToken = googleAccountCredential.getToken();

  youtube = new YouTube.Builder(HTTP_TRANSPORT, JSON_FACTORY, googleAccountCredential)
    .setApplicationName(getString(R.string.tourmaker_app_name))
    .build();

  YouTube.Channels.List channelRequest = youtube.channels().list("contentDetails");
  channelRequest.setMine(true);
  channelRequest.setFields("items/contentDetails,nextPageToken,pageInfo");
  ChannelListResponse channelResult = channelRequest.execute();

Если accountYoutube (см. строку кода 4) связан, этот код работает нормально и переходит к более позднему коду, который загружает.

Если accountYoutube не связан, оператор execute создает исключение GoogleJsonResponseException:

com.google.api.client.googleapis.json.GoogleJsonResponseException: 403 Forbidden { «код»: 403, «ошибки»: [ { «домен»: «глобальный», «сообщение»: «Недостаточное разрешение», «причина»: «insufficientPermissions» } ], «сообщение» : «Недостаточно разрешений» }

Таким образом, этот код сообщает вам, связана ли учетная запись Youtube. Будет ли такой код разумным способом определить, есть ли у аккаунта Youtube канал (связан)?

Я подозреваю, потому что это исключение кажется побочным эффектом, на который я не могу положиться.

Я ищу лучший способ определить, связан ли аккаунт с аккаунтом YouTube. Я бы использовал код в подходящее время, чтобы представить пользователю только связанные учетные записи.

Кто-нибудь знает надежный способ сделать это?


person BinCodinLong    schedule 18.06.2016    source источник


Ответы (1)


Для ошибки 404 или недостаточного разрешения.

На основании этого SO вопроса возвращается ошибка 403/InsufficientPermissions, если вы не запросили области, которые вам нужны для вашего приложения.

Хотя описание insufficientPermissions в документации Google что токен OAuth 2.0, предоставленный для запроса, указывает области действия, которых недостаточно для доступа к запрошенным данным.

Поэтому убедитесь, что вы запросили все области, которые вам нужны.

Для вашей проблемы с определением, связан ли канал YouTube с учетной записью.

Вы можете использовать каналы со свойствами status.isLinked, которые будут возвращать логическое значение, указывающее, идентифицируют ли данные канала пользователя, который уже связан либо с именем пользователя YouTube, либо с учетной записью Google+. Пользователь, у которого есть одна из этих ссылок, уже имеет общедоступную учетную запись YouTube, что является обязательным условием для некоторых действий, таких как загрузка видео.

Для получения дополнительной информации вы также можете проверить этот SO вопрос если это может вам помочь.

person KENdi    schedule 21.06.2016