6
votes

Échec de l'affirmation dans - [GTMHTTPUPLOadfetcher ConnectionDIDLOADING:]

J'essaie de télécharger une vidéo sur YouTube à l'aide de Google Apis Client Library pour Objective-C, J'utilise donnée ci-dessous le code mais il est continué à me donner cette erreur, j'ai essayé d'exécuter mon compte sur le projet YouTube Exemple de temps ici, il donne cette même erreur.

Quelqu'un peut-il me guider où est le problème. I Cochez la page YouTube Data API V3 est sur la page Services. P>

 NSString *path              = [[NSUserDefaults standardUserDefaults] objectForKey:@"MOVIEPATH"];
NSString *filename = [path lastPathComponent];
NSString *mimeType = [self MIMETypeForFilename:filename defaultMIMEType:@"video/mp4"];

NSError *eel=nil;

NSFileHandle *handle        = [NSFileHandle fileHandleForReadingFromURL:[NSURL URLWithString:path] error:&eel];
NSLog(@"error is  %@",eel);
if (!handle)
{
    NSLog(@"Failed to open file for reading");
    return;
}



GTLServiceYouTube *service      = [[GTLServiceYouTube alloc] init];
service.authorizer              = self.gTMOAuth2Authentication;

GTLUploadParameters *params     = [GTLUploadParameters uploadParametersWithFileHandle:handle MIMEType:mimeType];

GTLYouTubeVideoSnippet *snippet = [GTLYouTubeVideoSnippet object];
snippet.title                   = @"Test title";
snippet.descriptionProperty     = @"Test description";
snippet.tags                    = [NSArray arrayWithObjects:@"TestOne", @"TestTwo" ,nil];
snippet.categoryId              = @"17";

GTLYouTubeVideoStatus *status   = [GTLYouTubeVideoStatus object];
status.privacyStatus            = @"private";

GTLYouTubeVideo *video2          = [GTLYouTubeVideo object];
video2.snippet                   = snippet;
video2.status                    = status;

GTLQueryYouTube *query          = [GTLQueryYouTube queryForVideosInsertWithObject:video2 part:@"snippet,status" uploadParameters:params];



// Perform the upload
GTLServiceTicket *ticket        = [service executeQuery:query completionHandler:^(GTLServiceTicket *ticket, id object, NSError *error)
{
    if (error)
    {
        NSLog(@"ERROR: %@", error);
        return;
    }

    NSLog(@"SUCCESS! %@; %@;", ticket, object);
}];

ticket.uploadProgressBlock = ^(GTLServiceTicket *ticket, unsigned long long numberOfBytesRead, unsigned long long dataLength)
{
    NSLog(@"%lld / %lld", numberOfBytesRead, dataLength);
};


7 commentaires

Ajouter un peu de code significatif


téléchargé mon code pour le téléchargement


Vous devrez peut-être définir des param .uploadlocessionURL = nil;


J'essaie exactement le même problème ici, j'essaie le service.Authorizer Solution ci-dessous, mais vous ne l'avez pas marqué comme une réponse. Avez-vous réussi à le faire fonctionner?


J'avais quitté ce travail et je n'avais pas vérifié, laissez-moi savoir si cela fonctionne pour vous alors je la marquerai comme une réponse correcte, merci


@Developer, je veux télécharger une vidéo avec une capacité de reprise. Pouvez-vous m'aider à ce sujet? (Je ne peux plus demander la question.) J'ai déjà fait le même code que le vôtre.


@Vats je n'avais pas fait de codage avec la capacité de reprise. Si vous aviez fait cela, veuillez laisser vos pensées dans les réponses


8 Réponses :


0
votes

Désolé si je fais une hypothèse ici, mais j'avais la même erreur que vous, et il s'est avéré que la question était en réalité mon autorisateur. Assurez-vous que vous manipulez des erreurs avec authentification et appliquez l'AUTH au service Service.Autorizer CODE>.

if (![self.youTubeAuth canAuthorize]) {
    // ...
}
service.authorizer = auth;


0 commentaires

0
votes

Je suppose que vous devez activer l'API d'entraînement et conduire SDK à partir de l'onglet Services API

commuter les services pour le projet et réessayez.

Si les deux sont allumés, assurez-vous d'avoir défini "API_CONSOLE_PROJEJECT_ID": "xxxxxxxxxxxxxxxx" argument dans votre manifeste .


2 commentaires

Les deux services sont sur?


Devrais-je activer Google Drive SDK et API-S pour le téléchargement YouTube aussi?



1
votes

J'ai eu le même problème que vous (défaillance d'affirmation dans GTMHTTPUPLOadfetcher.m: 399) Tout en téléchargeant une vidéo sur YouTube. Je pose cela dans l'espoir de sauver quelqu'un d'autre quelques minutes de débogage.

Il s'est avéré que mon problème était un code ancien qui définit Apikey de GTLServiceYoutube dans Addition em> à l'utilisation de OAUTH2. DOH. P>

{
    "error": {
        "code": 403,
        "message": "Access Not Configured",
        "data": [{
            "domain": "usageLimits",
            "reason": "accessNotConfigured",
            "message": "Access Not Configured"
        }]
    },
    "id": "gtl_1"
}


1 commentaires

brillant. Set ApiKey à Nil corrige le problème. Merci moj



6
votes

J'ai rencontré le même crash et découvrez une solution. Il semble que le client reçoit également ce crash si la demande sous-jacente est une mauvaise demande, mais aucune information de réponse n'est explicitement fournie (mon autorisateur est valide et transmet le chèque avec la méthode canaThorize code> comme RYANAN_IRL pointé sorti).

Après avoir consulté la bibliothèque, j'ai découvert que définir le préprocesseur macro strip_gtm_fetch_logging code > et en permettant la journalisation du httpfetcher code> quelque part dans le code p> xxx pré>

Les journaux sont stockés dans le dossier gtmhttpdebuglogs code> à l'intérieur Le simulateur (quelque chose de similaire à / utilisateurs / / Bibliothèque / Application Support / iPhone Simulator / 6.1 / Applications / 65451CDB-27D6-4BE2-910C-7F22D6A01832 / GTMHTTPDEBUGUGLUGS code>). Vous pouvez trouver le journal complet au format HTML (...). P>

Entrez la description de l'image Ici p>

En cliquant sur ' journal de demande / réponse em>' Le journal suivant a été affiché dans mon cas. p>

Response body: (201 bytes)
{
  "id" : "gtl_1",
  "error" : {
    "message" : "Bad Request",
    "code" : -32602,
    "data" : [
      {
        "domain" : "youtube.video",
        "reason" : "invalidTitle",
        "locationType" : "other",
        "location" : "body.snippet.title",
        "message" : "Bad Request"
      }
    ]
  }
}


2 commentaires

Comme je l'ai écrit, avec la ligne [gtmhttpfetcher Setloggingenabled: oui]; . Il suffit de le mettre dans l'application: DidfinishLanchingwithOptions: méthode dans l'Appdelegate.


@ALBERTEDODEBORTOLI Pouvez-vous partager l'endroit où vous avez ajouté ce code? Je suis confronté au même problème, mais la solution ne fonctionne pas. Pouvez-vous s'il vous plaît conseil?



0
votes

Je l'ai trouvé d'ici, Google-YouTube -api-v3-iOS-App-Key-403-Error-Code

Fondamentalement, cela fonctionnera si nous utilisons une touche pour les applications de navigateur au lieu d'une touche pour iOS Apps .


0 commentaires

0
votes

Le problème était que je vous enregistre à partir d'un nouveau compte Gmail afin que je dois vous connecter au site YouTube et devez créer une chaîne avant que je puisse télécharger une vidéo sur YouTube. Alors maintenant, je peux télécharger des vidéos après avoir créé une chaîne YouTube. Mais comment puis-je gérer ce scénario pour d'autres utilisateurs, une idée


0 commentaires

0
votes

Je ne sais pas si quelqu'un a déjà trouvé la solution pour cela, mais voici ce que j'ai mis en œuvre (à Swift) pour éviter le crash de l'application:

première vérification de l'état de la chaîne YouTube à l'aide de:

gtlqueryyoyoutube.queryforcannelslistwithPart avec pièce définie sur "statut"

Si la valeur du paramètre "ISLinked" n'est pas 0 dans la réponse, téléchargez uniquement la vidéo en utilisant

gtlqueryyoutube.queryforvideosinsertwithObject

Sinon, demandez à l'utilisateur de relier d'abord le canal YouTube.


0 commentaires

-2
votes

GTLServiceYoutube * YouTube = [[GTLServiceYoutube Alloc] init]; youtube.apikey = @ "- My-Simple-API-Access-Key-"; // <- ligne fautive YouTube.Authorizer = [GTMOAUTHEVIEWCONTROLTOUCHTouch AuthorGoogleFromKeyChainforname: KeyChainitemname Clientide: Kyoutubeclientid ClientsCrêt: KyoutubeclientsCret];


1 commentaires

Il ne fonctionne pas sur le périphérique, il fonctionne sur simulateur