feat: youtube doc
This commit is contained in:
@@ -11,7 +11,6 @@ npm-debug.*
|
|||||||
web-build/
|
web-build/
|
||||||
ios/
|
ios/
|
||||||
android/
|
android/
|
||||||
youtube.md
|
|
||||||
# macOS
|
# macOS
|
||||||
.DS_Store
|
.DS_Store
|
||||||
|
|
||||||
|
|||||||
@@ -235,7 +235,7 @@ const PublishYoutube = () => {
|
|||||||
<GradientButton
|
<GradientButton
|
||||||
title={publishButtonLabel}
|
title={publishButtonLabel}
|
||||||
onPress={handleMarkPublished}
|
onPress={handleMarkPublished}
|
||||||
disabled={publishDisabled}
|
disabled={true}
|
||||||
/>
|
/>
|
||||||
|
|
||||||
{hasYoutubePublication && youtubeUrl && (
|
{hasYoutubePublication && youtubeUrl && (
|
||||||
|
|||||||
+77
@@ -0,0 +1,77 @@
|
|||||||
|
# Publication YouTube – guide refresh token
|
||||||
|
|
||||||
|
## 1. Récupérer un code d'autorisation
|
||||||
|
|
||||||
|
### 1.1 Trouver ou créer le Client ID
|
||||||
|
|
||||||
|
1. Ouvre la console Google Cloud : <https://console.cloud.google.com/apis/credentials>
|
||||||
|
2. Sélectionne le projet lié au compte YouTube.
|
||||||
|
3. Dans l’onglet « Identifiants », repère l’ID client OAuth 2.0 existant au format :
|
||||||
|
```
|
||||||
|
123456789012-abcdefghijklmnopqrstu.apps.googleusercontent.com
|
||||||
|
```
|
||||||
|
Copie-le : c’est `YOUR_CLIENT_ID`.
|
||||||
|
4. S’il n’existe pas encore, clique sur « Créer des identifiants » → « ID client OAuth » → type « Application Web » et ajoute `http://localhost:8081` dans les URIs de redirection autorisées. Enregistre, puis note l’ID client et le secret.
|
||||||
|
|
||||||
|
### 1.2 Générer un code d'autorisation
|
||||||
|
|
||||||
|
1. Ouvre cette URL dans un navigateur (mets à jour `redirect_uri` si besoin) :
|
||||||
|
```
|
||||||
|
https://accounts.google.com/o/oauth2/v2/auth?client_id=YOUR_CLIENT_ID.apps.googleusercontent.com&redirect_uri=http://localhost:8081&response_type=code&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fyoutube.upload&access_type=offline&prompt=consent
|
||||||
|
```
|
||||||
|
2. Connecte-toi au compte YouTube cible et accepte les permissions.
|
||||||
|
3. Google te redirige vers `http://localhost:8081/?code=...`. Copie la valeur du paramètre `code`.
|
||||||
|
|
||||||
|
## 2. Échanger le code contre un refresh token
|
||||||
|
|
||||||
|
```bash
|
||||||
|
curl -X POST https://oauth2.googleapis.com/token \
|
||||||
|
-d client_id=YOUR_CLIENT_ID.apps.googleusercontent.com \
|
||||||
|
-d client_secret=YOUR_CLIENT_SECRET \
|
||||||
|
-d code="CODE_RECU" \
|
||||||
|
-d grant_type=authorization_code \
|
||||||
|
-d redirect_uri=http://localhost:8081
|
||||||
|
```
|
||||||
|
|
||||||
|
La réponse JSON contient :
|
||||||
|
|
||||||
|
- `access_token` (jeton court terme),
|
||||||
|
- `refresh_token` (à conserver),
|
||||||
|
- `expires_in`, `scope`, `token_type`.
|
||||||
|
|
||||||
|
⚠️ Le `refresh_token` n’est renvoyé qu’une seule fois avec `access_type=offline`. Garde-le de manière sécurisée.
|
||||||
|
|
||||||
|
## 3. Mettre à jour les variables d'environnement Firebase
|
||||||
|
|
||||||
|
1. Enregistre les secrets côté Firebase (adapter le projet via `-P` si besoin) :
|
||||||
|
```bash
|
||||||
|
firebase functions:config:set \
|
||||||
|
YOUTUBE_CLIENT_ID="YOUR_CLIENT_ID.apps.googleusercontent.com" \
|
||||||
|
YOUTUBE_CLIENT_SECRET="YOUR_CLIENT_SECRET" \
|
||||||
|
YOUTUBE_REFRESH_TOKEN="YOUR_REFRESH_TOKEN"
|
||||||
|
YOUTUBE_REDIRECT_URI="http://localhost:8081" \
|
||||||
|
YOUTUBE_PRIVACY_STATUS="public" \
|
||||||
|
YOUTUBE_CATEGORY_ID="10" # 10 = Catégorie youtube de musique
|
||||||
|
```
|
||||||
|
2. Vérifie ce qui est stocké :
|
||||||
|
```bash
|
||||||
|
firebase functions:config:get
|
||||||
|
```
|
||||||
|
3. Redéploie la fonction :
|
||||||
|
```bash
|
||||||
|
firebase deploy --only functions:youtube
|
||||||
|
```
|
||||||
|
|
||||||
|
## 4. Exemple de réponse OAuth
|
||||||
|
|
||||||
|
```
|
||||||
|
http://localhost:8081/?code=4/0Ab32j90LMDeJDShWSk1OkXwgbjrHS-qQpyYTlXhH9q3nlV0EJa6cTL-7nI9yOKHoz6rgRA&scope=https://www.googleapis.com/auth/youtube.upload
|
||||||
|
|
||||||
|
{
|
||||||
|
"access_token": "ya29.a0ATi6K2uR4DhnmTDl0EN2tvDogwwEwl8SDJLpUzvnZ8LGgOYjgmhqg7MoMM0_iTJR_NBEDPe2LlJDqCFFnIi9s3qRv_zfw_NeTnN-LwUmAyVJkdqSP6GvzQCuZkE6OBuTvaU5b2obk5rHvDOkWXxAb7xjbVTzIBIg8O5VVhJ-VB8VEbTVsSq9bc0ljkbcyBEzm4JdQRwaCgYKAcgSAQ8SFQHGX2MiR1Owf2aiiEBUsU-LDUDgWg0206",
|
||||||
|
"expires_in": 3599,
|
||||||
|
"refresh_token": "1//03sy-LDVmCMcFCgYIARAAGAMSNwF-L9IrHwwdBBZvg3Hwun9hxHUx_AsJaa1qeozmtvGtdOXKIRIyKjTp7S_b0igvzM_1A5bLH34",
|
||||||
|
"scope": "https://www.googleapis.com/auth/youtube.upload",
|
||||||
|
"token_type": "Bearer"
|
||||||
|
}
|
||||||
|
```
|
||||||
Reference in New Issue
Block a user