2016-08-03 1 views
0

J'ai une application iOS mobile écrit à Swift 2. Dans l'application il y a un appel à notre serveur viaiOS 9+ TestFlight Données cellulaires ne fonctionne pas

Session.dataTaskWithRequest(request, completionHandler: (func)) 

J'ai 3 iPads avec des données cellulaires. 1 interne, auquel j'ai accès et que je peux connecter à un débogueur. 2 externe que je n'ai pas accès et doit poser des questions pour avoir une idée de ce qui se passe.

L'iPad interne fonctionne avec la version X à la fois sur WiFi et sur Cellular, par les travaux, je veux dire que la requête passe par et contacte bien le serveur.

Les iPads externes fonctionnent sur le WiFi mais ne fonctionnent pas sur le cellulaire.

Nous avons essayé

  • assurer des données mobiles est sur, & sur pour l'application spécifique
  • Basculement mode Avion
  • Remise à zéro réseau
  • Redémarrage Device
  • Assurez-vous que les dispositifs effectivement avait une connexion lorsque le dataTaskWithRequest a échoué.

Des idées de ce qui peut se passer ici? Y a-t-il un paramètre manqué? Un paramètre dans info.plist (pourquoi est-ce que 1 fonctionne) que j'ai raté?

+0

Votre serveur accessible à partir du réseau cellulaire des utilisateurs externes? Vous pouvez essayer de vérifier le blocage par le FAI avec un navigateur Web ou similaire. – dgatwood

+0

Le serveur est accessible à partir du navigateur, cela semble être uniquement un problème avec les demandes provenant de l'application iOS. Il y a une réécriture des requêtes à rediriger qui se passe dans l'application, qui peut être filtrée. Fait une nouvelle construction pour capturer la réponse du serveur des utilisateurs rencontrant le problème – Ajwhiteway

Répondre

0

Alors dgatwood était sur la bonne voie.

Les demandes dans l'application étaient redirigées vers un serveur externe dans certains cas, et un serveur interne dans d'autres cas. Comme ces requêtes provenaient de WKWebView, elles avaient les HTTPHeaderField standard provenant de WKWebView. Étant donné que ces demandes pointaient vers l'intérieur d'un mini-serveur écrit à vivre dans l'arrière-plan de l'application de ces trois têtes contenaient des informations incorrectes pour la demande

  • Origine
  • Referer
  • hôte

Plus un plan de données de coopération, il y avait un filtrage qui se passe pour les demandes. Comme l'origine déclarée dans les champs d'en-tête ne correspondait pas à l'origine de l'appel, le réseau cellulaire abandonnait les demandes et n'atteignait jamais le serveur.

La question a été corrigée par

Espérons que quelqu'un
request.setValue(nil, forHTTPHeaderField: "Origin") 
request.setValue(nil, forHTTPHeaderField: "Host") 
request.setValue(nil, forHTTPHeaderField: "Referer") 

trouve cela utile à un moment donné