如何查看 Google 帐户持有人是否有 Youtube 频道(已链接)?

How to see if Google account holder has a Youtube channel (is linked)?

根据 Google 文档,任何 Google 帐户持有人也是 Youtube 帐户持有人,但他可能不是 "linked",即拥有 Youtube 频道。应用只能将视频上传到关联的帐户。

如果您使用 AccountManager 获取 Google 帐户持有人的列表,那么您无法判断其中任何一个是否已链接。我需要一种方法来确定它是否已链接。

似乎没有直接专门调用 Youtube api 来查看帐户是否有频道(已链接)。

也许可以重新调整以下代码片段的用途:

  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,执行语句将抛出 GoogleJsonResponseException:

com.google.api.client.googleapis.json.GoogleJsonResponseException: 403 禁止访问 { "code" : 403, "errors":[{ "domain" : "global", "message" : "Insufficient Permission", "reason" : "insufficientPermissions" } ], "message" : "Insufficient Permission" }

因此,这段代码可以告诉您 Youtube 帐户是否已关联。这种代码是否是确定 accountYoutube 是否有频道(已链接)的合理方法?

我很怀疑,因为这个异常似乎是我可能无法依赖的副作用。

我正在寻找一种最佳做法来确定是否链接了 accounYoutube。我会在适当的时候使用代码向用户展示仅链接的帐户。

有谁知道可靠的方法吗?

对于错误 404 或权限不足。

基于此 SO question,当您没有请求您的应用程序所需的范围时,return 会出现错误 403/InsufficientPermissions。

虽然 Google 文档中 insufficientPermissions 的描述是为请求提供的 OAuth 2.0 令牌指定的范围不足以访问请求的数据。

因此,请确保请求您需要的所有范围。

关于确定 YouTube 频道是否与帐户相关联的问题。

您可以使用具有属性 status.isLinked 的频道,该属性将 return 一个布尔值,该值将指示频道数据标识的用户是否已链接到 YouTube 用户名或Google+个帐号。拥有其中一个链接的用户已经拥有 public YouTube 身份,这是执行多项操作(例如上传视频)的先决条件。

如果对您有帮助,您也可以查看此SO question了解更多信息。