2

YouTube への動画のアップロードをすばやく実装できるシンプルなラッパー ライブラリに取り組んでいますが、問題に直面しました。ユーザーが選択できるアカウントにはいくつかの「タイプ」があります - 完全な Google 機能を備えた通常のアカウント、サービス アカウント ( https: //developers.google.com/youtube/v3/docs/errorsで、「youtubeSignupRequired」という単語を検索してください)、および一部の Google サービスへのアクセスが制限されている一部のビジネス アカウント。もちろん公式のドキュメントに頼るわけではなく、私なりの分類です。
そのため、ある時点で、ユーザーにアカウントを選択するように要求しています

private void selectAccountToLogin(Activity activity){
    Intent intent = AccountPicker.newChooseAccountIntent(null, null, new String[]{GoogleAuthUtil.GOOGLE_ACCOUNT_TYPE}, true, "", null, null, null);
    activity.startActivityForResult(intent, SELECT_ACCOUNT_REQUEST);
}

これらの行は、アカウントを選択するためのダイアログを作成するだけで、今はすべて問題ありません。次に、選択したアカウントのトークンを取得します。

String token = GoogleAuthUtil.getToken(activity, account, OAUTH_SCOPE);

重要 - すべての「タイプ」のアカウントのトークンを受け取りました (これは通常、Google サービスの一般的な認証手順によるものだと思います)。次に、自分の動画を YouTube にアップロードしたいのですが、ここに魔法がかかります。

1) 私の個人的な Gmail アカウントはすべて問題なく動作しています - ビデオは正常にアップロードされました。
2) ビジネス アカウント (YouTube にアクセスできない) の場合、401 を受け取りました

com.google.api.client.googleapis.json.GoogleJsonResponseException: 401 Unauthorized
 {
   "code" : 401,
   "errors" : [ {
     "domain" : "global",
     "location" : "Authorization",
     "locationType" : "header",
     "message" : "Invalid Credentials",
     "reason" : "authError"
    } ],
    "message" : "Invalid Credentials"
}

403 ではなく 401 が表示されるのはなぜですか? (これはより修辞的な質問です) しかし、この時点ではすべてがそれほど悪くはありません:
3) サービス アカウントについても 401 を受け取りました。

com.google.api.client.googleapis.json.GoogleJsonResponseException: 401 Unauthorized
 {
   "code" : 401,
   "errors" : [ {
     "domain" : "youtube.header",
     "location" : "Authorization",
     "locationType" : "header",
     "message" : "Unauthorized",
     "reason" : "youtubeSignupRequired"
   } ],
   "message" : "Unauthorized"
 }

したがって、2つの異なる理由で、同じ401を取得しました。もちろん、json応答のドメインとヘッダーパラメーターによってこれらの状況を区別できますが、私にとっては醜く不正確なアプローチです。
誰かがすでにこの問題に直面していて、より正確な方法で解決しているのではないでしょうか? 私が望むのは、状況に関する正確な情報を取得し、それをユーザーに提示することだけです。

4

0 に答える 0