#ios #swift #google-cloud-platform #youtube-data-api #google-signin
#iOS #swift #google-облачная платформа #youtube-data-api #google-вход
Вопрос:
Я работаю над приложением для IOS, использующим Swift, для которого требуется доступ к подпискам пользователя на YouTube. После добавления всех областей, которые мне нужны на облачной платформе Google, и внедрения GoogleSignIn в Firebase. Я вхожу в систему (GIDSignInButton), затем после выполнения этого запроса я получаю сообщение об ошибке, показанное ниже:
https://www.googleapis.com/youtube/v3/subscriptions?part=snippet,contentDetailsamp;mine=trueamp;key=(apiKey)amp;access_token=(Access_Token)
.
Access_Token — это тот, который я получил после вызова:
func sign(_ signIn: GIDSignIn!, didSignInFor user: GIDGoogleUser!, withError error: Error?){
user.authentication.accessToken
....}
Ошибка, которую я получаю:
["error": {
code = 403;
errors = (
{
domain = global;
message = "Insufficient Permission";
reason = insufficientPermissions;
}
);
message = "Request had insufficient authentication scopes.";
status = "PERMISSION_DENIED";
}]
В делегате приложения я установил это:
GIDSignIn.sharedInstance().clientID = FirebaseApp.app()?.options.clientID
Ответ №1:
У меня была та же проблема, и, если я правильно помню, это произошло, когда мой статус проверки согласия OAuth не был подтвержден. Что я сделал, чтобы заставить его работать, так это то, что в дополнение к предоставлению областей в панели управления Google я добавил их программно перед входом в систему.
GIDSignIn.sharedInstance().scopes.append("https://www.googleapis.com/auth/youtube.upload")
GIDSignIn.sharedInstance().signIn()
Ответ №2:
Во-первых, отбросьте параметр key=(apiKey)
; авторизация основана исключительно на access_token=(Access_Token)
.
Обратите внимание, что токены доступа недолговечны. Вы можете отправить GET
запрос HTTPS на:
https://www.googleapis.com/oauth2/v1/tokeninfo?access_token=(Access_Token)
для проверки того, действителен ли ваш токен доступа. Предоставленный ответ будет выглядеть либо как:
{
"error": "invalid_token",
"error_description": "Invalid Value"
}
или как:
{
"issued_to": "...",
"audience": "...",
"scope": "...",
"expires_in": 3599,
"access_type": "offline"
}
Затем дважды проверьте, что у вас есть необходимые области, подключенные к этому токену доступа, на случай, если он действителен.