2017-09-28 2 views
2

J'ai une année & une demi-application à mettre à jour. Il a été écrit dans Statemachine. Maintenant, j'ai ajouté quelques choses, mais la connectionRequest ne semble pas fonctionner dans iOS (qui a été construit pour le débogage iOS). Je l'ai construit dans Android et ça marche très bien.ConnectionRequest ne fonctionne pas dans iOS

public void connectionForLogin(String username, String password) { 
    ConnectionRequest cr = new ConnectionRequest() { 

     @Override 
     protected void readResponse(InputStream input) throws IOException { 
      JSONParser jSONParser = new JSONParser(); 
      Map<String, Object> parsedData = jSONParser.parseJSON(new InputStreamReader(input)); 
      ArrayList<Map<String, Object>> response = (ArrayList<Map<String, Object>>) parsedData.get("root"); 
      if (response != null) { 
       for (Map<String, Object> element : response) { 
        success = (String) element.get("login"); 
        msg = (String) element.get("msg"); 

        ArrayList<Map<String, Object>> userInfoArray = (ArrayList) element.get("user_info"); 
        Storage.getInstance().writeObject("userInfo", userInfoArray); 
       } 
      } 
     } 

     @Override 
     protected void postResponse() { 
      super.postResponse(); 
     } 

     @Override 
     protected void handleErrorResponseCode(int code, String message) { 
     } 

     @Override 
     protected void handleException(Exception err) { 
     } 

     @Override 
     protected void handleIOException(IOException err) { 
     } 

     @Override 
     protected void handleRuntimeException(RuntimeException err) { 
     } 
    }; 
    cr.setPost(true); 
    cr.setDuplicateSupported(true); 
    cr.setTimeout(30000); 
    AllUrl au = new AllUrl(); 
    InfiniteProgress ip = new InfiniteProgress(); 
    Dialog d = ip.showInifiniteBlocking(); 
    cr.setDisposeOnCompletion(d); 
    cr.setUrl(http://zzz.com/api/logins/match? + "username=" + username + "&password=" + password); 
    NetworkManager.getInstance().addToQueueAndWait(cr); 
} 
+0

Est-ce dû à url? L'API est en http et je pense que iOS nécessite https. Mais si oui, pourquoi la version précédente fonctionne-t-elle bien? – beck

Répondre

1

Cela peut être dû à la nouvelle réglementation Apple qui empêche les applications d'extraction de données à partir de l'URL non sécurisée http. Vous pouvez résoudre ce problème en ajoutant temporairement ci-dessous indice de construction:

ios.plistInject=<key>NSAppTransportSecurity</key><dict><key>NSAllowsArbitraryLoads</key><true/></dict><key>CFBundleURLTypes</key><array><dict><key>CFBundleURLName</key><string>com.mycompany.myapp</string></dict><dict><key>CFBundleURLSchemes</key><array><string>MyApp</string></array></dict></array> 

Notez que votre application peut être rejetée si elle est connectée à une URL non sécurisée.

+0

Après l'avoir ajouté dans l'indice de construction, l'application ne peut pas être installée dans les périphériques. Il affiche "Impossible de télécharger l'application" boîte de dialogue – beck

+0

Cela est lié au réseau, essayez de supprimer l'ancienne application et redémarrez votre appareil. – Diamond

+0

pas toujours la même chose. J'ai essayé en remplaçant com.mycompany.myapp avec mon nom de paquet mais le problème existe – beck