2013-04-24 2 views
2

У меня есть приложение, которое отправляет геолокации каждые 5 секунд, и если новое местоположение не найдено, последнее найденное местоположение каждую минуту. Таким образом, в принципе, приложение не может прекратить отправку геолокации в файл PHP.iOS перестает отправлять http-запросы случайно [Titanium]

Тем не менее он делает. Совершенно случайно. Приложение просто прекращает отправку на сервер без ошибок (потому что у меня есть предупреждение в моем onerror) и просто начинает повторную отправку снова, когда я открываю приложение, чтобы узнать, что происходит.

Как хорошо работает на Android, кстати!

У меня есть некоторые вещи в моем info.plist, чтобы сохранить его живым (И это держать его в живых, но просто перестает жить наобум я думаю):

<key>UIBackgroundModes</key> 
<array> 
    <string>external-accessory</string> 
    <string>location</string> 
</array> 

И мой HttpRequest выглядит следующим образом:

function sendCoordinates() { 
     //Reset the visual text(errors/succesmessage etc) 
     if (Titanium.Network.online) { 

      //Concat the GPSholder array into the toSend and than empty the GPSholder. 
      //To toSend accumulates GPSholder arrays in case it can't be sent for some reason but avoids getting duplicates in the GPSholder 
      //the toSend is emptied out after a succesful save. 
      toSend = toSend.concat(getGPSholder()); 
      GPSholder = []; 
      if (toSend.length > 0) { 
       GPSSaved.text = ''; 
       minuteInterval = 0; 
       var xhr=Titanium.Network.createHTTPClient({enableKeepAlive: false}); 
       xhr.open("POST","http://xxx.nl/website/services/esrm_tracker/push_tt_positions.php");   
       xhr.onload = function(){ 

        if(this.status == '200'){ 

         if(this.readyState == 4){ 
          var result = JSON.parse(this.responseText); 

          switch(result.result) { 
           case 1: 
            secondsLastSent = 0; 
            counterBlock.text = "De laatste locatie is " + secondsLastSent + " seconden geleden verstuurd"; 
            counterBlock.show(); 
            toSend = []; 
           break; 

           case -1: 
            GPSSaved.text = 'Authorisatie code niet geldig. Er worden geen locaties meer verstuurd.'; 
           GPSstop(); 
          break; 

          case -2: 
           GPSSaved.text = 'Locaties niet geldig'; 
          break; 

          case -3: 
           GPSSaved.text = 'Authorisatie code niet gevonden. Er worden geen locaties meer verstuurd.'; 
           GPSstop(); 
          break; 

          case -10: 
           GPSstop(); 
          break; 

          default: 
           GPSSaved.text = 'Onbekende fout. Er worden geen locaties meer verstuurd.'; 
           GPSstop(); 
          break; 
         } 
        }  
       } 
      } 
      xhr.onerror = function(e){ 
       GPSSaved.text = e.status + ' <- error'; 
       alert(e); 
      }; 

      xhr.timeout = 10000; 

      xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded"); 
      var str = JSON.stringify(toSend); 
      var params = { 
       auth_key : auth_key, 
       locations : str 
      }; 

      xhr.send(params); 
     } 
    } else { 
     GPSSaved.text = 'Geen internet. Het versturen van locaties wordt hervat als de verbinding is hervat.'; 
    } 
} 
+1

как фриз, я рад поддержать в вопросе, который включает в себя «Elfstedentocht». Свяжитесь со мной, если у вас возникнут дополнительные проблемы. –

+0

Спасибо за предложение. Если эта проблема может быть решена, у меня может быть что-то еще на рукаве, чтобы пойти с этим ха-ха. Тем не менее я удалил ссылку на данный момент haha ​​ – CaptainCarl

ответ

0

Из чего я могу судить по вашему коду, вы не регистрируете фоновое задание для iOS. Вы только намереваетесь делать это, настраивая его.

Я также не думаю, что это случайно, но через 5 минут после закрытия приложения. В этот момент приложение pauses, пока оно не будет открыто снова, и таким образом оно будет продолжать передавать местоположение.

Вы должны взглянуть на эту документацию: http://docs.appcelerator.com/titanium/latest/#!/api/Titanium.App.iOS.BackgroundService

var service = Ti.App.iOS.registerBackgroundService({url:'bg-service1.js'}); 

Обратите внимание, что он будет работать другой экземпляр, и вы не должны включать в себя все приложения в этом фоне службы, так как он также не будет иметь UI. Создайте для него отдельный файл с включением необходимых HTTP-вызовов &, ничего более.

+0

И что я должен добавить в backgroundservice? Только эта функция? – CaptainCarl

+0

О, П.С. Он работает в режиме ожидания около 20 минут без каких-либо проблем с приостановкой. Он просто отправляет места каждую минуту или около того (это лежит на моем столе). – CaptainCarl

+0

вам нужно будет создать файл, который имеет все функциональные возможности, он вам понадобится для правильной работы, поскольку он не будет знать о каких-либо других файлах (если вы не включите их). Это включает в себя все зависимости –

Смежные вопросы