2015-09-02 43 views
0

我正在開發一個家庭成員可以請求並獲得其他家庭成員的當前位置的應用程序(家庭安全),未經其他家庭成員的同意。 即使應用程序未運行。 通過推送通知無法實現當應用未運行時,推送通知將不起作用。當有人要求定位時,我不想向用戶顯示通知。無論應用程序運行與否,我都希望它能夠正常工作。請給我建議任何解決方案來完成這項任務。當應用程序未運行時顯示用戶位置,未顯示推送通知

PS。請不要告訴我,我不應該得到像這樣的用戶位置,否則我的應用程序將被拒絕。因爲我正在爲家庭安全公司開發此應用程序,家庭成員將首先閱讀並接受公司的政策。

+0

'即使應用程序未運行' - 是不可能的,因爲它沒有運行。你唯一的選擇是保持應用程序在後臺運行,並希望沒有人會殺死它 – Wain

+0

嗨Wain - Wasseem我敢肯定,當「在後臺運行」。 Waseem - **編輯你的標題和帖子**所以它說!你會得到更多的答案 – Fattie

+0

NO。我的意思是應用程序沒有運行。我看過應用Life360(https://www.life360.com/),它正在做同樣的事情。我不知道他們如何實現這個 –

回答

2

首先使用requestAlwaysAuthorization而不是requestWhenInUseAuthorizationCLAuthorizationStatus訪問位置,當應用程序是相當。

現在使用

UIApplication* application = [UIApplication sharedApplication]; 
__block UIBackgroundTaskIdentifier background_task; 
background_task = [application beginBackgroundTaskWithExpirationHandler:^ { 
    [application endBackgroundTask: background_task]; 
    background_task = UIBackgroundTaskInvalid; 
}]; 
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ 
    [[self locationManager] startUpdatingLocation];//call you web-api here to update location on server. 
    [application endBackgroundTask: background_task]; 
    background_task = UIBackgroundTaskInvalid; 
}); 

這將幫助。

+0

你不明白我的問題。 –

0

在沒有用戶干預的情況下請求設備的位置,而且當應用程序未運行時,在iOS中也不可能。

當應用程序終止時獲取iOS設備位置的唯一方法是使用重要位置更改。即使應用沒有運行,SLC也會提供位置更新。它只會喚醒應用程序並提供位置更新。

但是,如果您希望設備的位置請求,應用程序必須運行以接收請求並處理它。

+0

我已經看到應用程序Life360(life360.com),即使它沒有運行並且它工作正常,它也會請求用戶位置。我不知道他們如何實現這一點 - –

+0

運氣好嗎?你的案子得到解決方案嗎?請讓我知道如果你找到一個.. – Anand

+0

是的。簡單的推送通知是不可能的。但我使用PushKit併發送了一個voip推送到設備。如果終止或暫停,Voip會激活應用程序。收到voip推送後,您可以執行任何操作,因爲應用程序不再被暫停或終止。但要注意,使用Voip而不具有voip功能將會拒絕你的應用程序。我也有一個voip功能;) –

相關問題