J'utilise QuickBlox iOS SDK (version 2.9.2) et a obtenu un échec avec le code d'erreur 422 lorsque vous appelezQuickBlox iOS a échoué avec le code d'erreur 422
[QBRequest createObject:qbcoCustomObject successBlock:^(QBResponse *response, QBCOCustomObject *object) {
} errorBlock:^(QBResponse *response) {
}];
Il arrive qu'occasionnellement et ne reprend pas jusqu'à ce que je LOGOUT et connectez-vous à nouveau QuickBlox.
Le message d'erreur est le suivant:
2017-04-24 06:18:45.855557 App[8720:4958563] [QBCore] Response error: Error Domain=com.alamofire.error.serialization.response Code=-1011 "Request failed: client error (422)" UserInfo={com.alamofire.serialization.response.error.response=<NSHTTPURLResponse: 0x17422ed40> { URL: https://api.quickblox.com/data/MyCircleComments.json } { status code: 422, headers {
"Access-Control-Allow-Origin" = "*";
"Cache-Control" = "no-cache";
Connection = "keep-alive";
"Content-Length" = 45;
"Content-Type" = "application/json; charset=utf-8";
Date = "Mon, 24 Apr 2017 12:18:45 GMT";
"QB-Token-ExpirationDate" = "2017-04-24 14:09:35 +0000";
"QuickBlox-REST-API-Version" = "0.1.1";
Server = "openresty/1.9.15.1";
Status = "422 Unprocessable Entity";
"X-Rack-Cache" = "invalidate, pass";
"X-Request-Id" = 89f509abd6fd7f61d02e34ae9e83ce70;
"X-Runtime" = "0.009477";
"X-UA-Compatible" = "IE=Edge,chrome=1";
} }, NSErrorFailingURLKey=https://api.quickblox.com/data/MyCircleComments.json, com.alamofire.serialization.response.error.data=<7b226572 726f7273 223a7b22 62617365 223a5b22 466f7262 69646465 6e2e204e 65656420 75736572 2e225d7d 7d>, NSLocalizedDescription=Request failed: client error (422)}
2017-04-24 06:18:45.856659 App[8720:4958563] [QBCore] Response error reasons: {
errors = {
base = (
"Forbidden. Need user."
);
};
}
En raison du fait qu'il reprend seulement après que je déconnecte pas, je pense qu'il peut être lié à l'expiration de la session. J'ai ajouté la méthode de connexion à didFinishLaunching et didBecomeActive de l'application afin que l'application se reconnecte automatiquement pour s'assurer que la session de connexion soit valide. La méthode de connexion que j'utilise est
[QBRequest logInWithUserLogin:sUsername password:sPassword successBlock:^(QBResponse *response, QBUUser *user) {
} errorBlock:^(QBResponse *response) {
}];
et en définissant des points d'arrêt, je suis sûr que chaque fois que la reconnexion automatique a réussi. Cependant, l'auto-réactivation de l'application ne fonctionne pas. L'échec se produit toujours occasionnellement et la seule issue est la déconnexion et la connexion manuellement.
J'ai recherché sur Google ce problème et trouvé un tas de sujets, mais aucun ne semble répondre à mon problème. (Un article suggère que l'heure de l'appareil n'est peut-être pas synchronisée, mais mon iPhone utilise l'heure du réseau.)
Quelqu'un peut-il me donner une idée de la raison pour laquelle l'appareil échoue et une solution est très appréciée. Merci d'avance.
Veuillez créer un problème dans [notre rapport] (https: // github.com/QuickBlox/quickblox-ios-sdk) et ajoutez des journaux complets. –
Avec une enquête plus approfondie, je trouve que ce n'est pas l'expiration de la session, mais le problème de performance de Quickblox. Mon application récupérera la demande de toutes les informations des utilisateurs, puis téléchargera tout l'avatar (à partir de Contents) au démarrage, ce qui est relativement lourd. Si je publie quelque chose ([QBRequest createObject ...]) immédiatement après le démarrage de l'application, l'erreur 422 se produira sûrement, mais si j'attends 5 secondes avant que le devoir de démarrage ne se termine, ce problème ne se produira jamais. Ma solution consiste alors à charger le démarrage de manière synchrone et cela fonctionne bien maintenant. – kuang