2016-02-07 54 views
6

Ajax ile sunucuya dosya yükleyen bir uygulama yapıyorum. Sorun, kullanıcıların büyük olasılıkla bazen internet bağlantısına sahip olmaması ve istemcinin bağlantıyı geri aldığında zamanlaması planlanan ajax aramasının olmasını istemesidir. Bu, kullanıcının çevrimdışıyken dosya yüklemesini zamanlaması ve uygulamayı kapatmasıyla mümkündür. Uygulama kapatıldığında (arka planda değil) ajax araması yapmak mümkün mü? Uygulama arka planda olduğunda, arkaplan getirme özelliğini kullanabiliriz ancak uygulama kapatıldığında bir şey yapmak için hiçbir zaman bir sorunla karşılaşmadım.Uygulama kapatıldığında iOS görevi

+0

kullanım arka plan işlemi daha sonra indirme yapmak için ... –

+0

@FahimParkar - Şunu, Uygulama arka planda açıldığında veya herhangi veya arka plan sürecinin başka tür? – Tukkan

+1

NSURLSession'ı araştırın, bu sayede işletim sisteminin size ne zaman ulaşacağını ve sizi tamamladığınızı bildirecek şekilde arka plan transferleri yapmasına izin verir. İhtiyacınız olan her şeyi yapabilir. (Sadece bu tesisi araştırmaya başladım, o yüzden uzman değilim.) –

cevap

4

Kısa cevap hayır, uygulamanız sonlandırıldıktan sonra kod çalıştıramaz.

AppDelegate ürünündeki applicationWillTerminate kodunuzu çalıştırabilirsiniz, ancak bu yöntem esas olarak kullanıcı verilerini ve diğer benzer görevleri kaydetmek için tasarlanmıştır.

Ayrıca bkz this answer.

2

Evet, arka planda bir şeyler yapabilirsiniz. Birkaç farklı arka plan çalışma modu ile sınırlıdır. Sunucu iletişimi, izin verilen modlardan biridir (arka plan getirme). Kurallara göre Xcode'da özellikleri doğru bir şekilde ayarladığınızdan emin olun (yani, veri aktarımı yaparken bir ses uygulaması olduğunu söylemeyin). Burada ayrıntılara bakın: Kendisiyle ilişkilendirilmiş Cordova etiketi vardır çünkü sorunuzu bulundu

https://developer.apple.com/library/ios/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/BackgroundExecution/BackgroundExecution.html

. Eğer Cordova kullanıyorsanız, arka planda bir şeyler yönetmek için buraya bu eklentiyi kullanabilirsiniz:

https://github.com/katzer/cordova-plugin-background-mode

Edit: Kullanıcının uygulamayı sonlandırma KUVVET kapama/ise, yapabileceğiniz hiçbir şey yoktur. Uygulamadan ana ekrana geçiyor ve diğer uygulamaları kullanıyorlarsa, arka planda çalışabilirsiniz.

Yapabileceğiniz diğer seçenek, dosyayı yüklemek için yerel bir bildirim zamanlamasıdır. Uygulamayı başarılı bir şekilde yüklerseniz, dosya açık/bir bağlantıya sahip olduğundan/arka planda yaptıysa, yerel bildirimi iptal edersiniz.

Yerel bildirim iptal edilmezse, kullanıcıya dosyanın yüklenmediğini hatırlatır ve bildirimi açtıklarında uygulamanız kaldığı yerden başlayacaktır.

1
- (void)applicationWillTerminate:(UIApplication *)application { 
if (application) { 
    __block UIBackgroundTaskIdentifier backgroundTask = UIBackgroundTaskInvalid; 
    backgroundTask = [application beginBackgroundTaskWithName:@"MyTask" expirationHandler:^{ 
     backgroundTask = UIBackgroundTaskInvalid; 
    }]; 
    [self doSomething]; 
    [application endBackgroundTask:backgroundTask]; 
    backgroundTask = UIBackgroundTaskInvalid; 
    } 
} 
İlgili konular