1

我試圖找出當涉及到後臺任務時,iOS上實際可能實現的功能。 我有一個應用程序在後臺運行並跟蹤設備上的位置更改。當接收到推送通知時,在後臺執行代碼

現在,是否可以向設備發送推送通知,並讓設備將當前位置發送到服務器,而無需用戶打開應用程序,以便它在前臺運行?

回答

-1

不幸的是,我不這麼認爲。當您的應用處於暫停(凍結)狀態時,推送通知由SO管理,用戶需要重新打開該應用。另一種方式是爲重要更改創建本地通知,當通知到達您的應用程序的時間最短時,發佈數據將不夠,但您可以學習一些內容。我會建議你閱讀這個關於藍牙和地理定位的問題link

-1

這是不可能的。這個操作系統有一個原則 - 用戶應該知道你(你的應用)做了什麼。當您的應用程序被暫停時,您的推送消息將被通知中心收到。讓您的應用程序知道發生此事的唯一方法是通過通知中心啓動您的應用程序。因此.....

+0

你確定嗎?根據這個線程的答案(http://stackoverflow.com/questions/15225677/ios-push-notifications-update-badge-without-alert)它可能發送空的通知。不會顯示任何警報或徽章,並且您可以包含一些自定義詞典數據。但是你要說的是,這些數據不會被傳送到應用程序,直到應用程序啓動?我的應用程序正在運行後臺監視位置更改。 – Trj 2013-03-08 07:50:57

+0

沒有警報或徽章通知用於將其他自定義詞典數據發送到您的應用程序。您的後臺工作也是從系統註冊,當您的應用程序到達後臺時,無法接收推送消息,您的通知是從系統註冊的情況,太。 – junkor 2013-03-08 08:10:06

0

我知道這個問題有點老,但我正在回答那些和我一樣,在提問後很久就到達這裏的人。

現在,是否可以向設備發送推送通知,並讓設備將當前位置發送到服務器,而無需用戶打開應用程序,以便在前臺運行?

是的。你現在可以做到這一點。我目前在我的應用中做了非常類似的事情。還有一些其他的問題現在可以正確地說明這一點。 This is one

基本上,你必須啓用Background ExecutionRemote Notifications。您可以通過轉到您的應用的目標來在XCode中執行此操作。打開Capabilities選項卡,啓用Background Modes功能並檢查清單中的Remote Notifications項目。 (我假設你已經啓用了Push Notifications功能)。

有了這個你用來處理前臺通知的代碼也會在後臺爲你服務 application:didReceiveRemoteNotification:fetchCompletionHandler方法將在你的應用程序在後臺時被調用。 下面是雨燕3.0的樣本代碼:

func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable: Any]) { 
    // Print full message. 
    print(userInfo) 
} 

func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable: Any], 
       fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) { 

    // Print full message. 
    print(userInfo) 

    completionHandler(UIBackgroundFetchResult.newData) 
} 

你可能想看看這個如何處理在後臺網絡請求,以便問題(和接受的答案)。 Background request not execute Alamofire Swift

Check our the docs about Background Execution.特別是關於推送通知的部分

相關問題