2013-06-27 107 views
14

iOS的「本地」推送通知

我正在尋找一種方法,使「本地」推送通知。我無法弄清楚我該怎麼做,所以我正在尋求一些幫助。我需要的是:

  • 一種爲24小時內未打開應用程序的用戶發送通知的方式。 (或者說一個INT還沒有變化)

我真的希望你們中的一個有時間幫我,謝謝!

+6

我在爲您輸入標籤*時注意到*表示ui-local-not ification是列出的標籤。這讓我懷疑你在來這裏之前試圖找到解決問題的辦法。 – borrrden

回答

44

這是非常簡單的:

1)當應用程序被關閉,安排本地通知,如果應用程序被打開,將在24小時內

- (void)applicationDidEnterBackground:(UIApplication *)application 
{ 
    UILocalNotification *notification = [[UILocalNotification alloc] init]; 
    notification.fireDate = [[NSDate date] dateByAddingTimeInterval:60*60*24]; 
    notification.alertBody = @"24 hours passed since last visit :("; 
    [[UIApplication sharedApplication] scheduleLocalNotification:notification]; 
} 

2)火(在本地通知觸發之前),取消本地通知

- (void)applicationDidBecomeActive:(UIApplication *)application 
{ 
    [[UIApplication sharedApplication] cancelAllLocalNotifications]; 
} 
+0

謝謝,這有助於很多! –

+0

我有一個快速問題: - 如果我現在想檢查它是否正常工作,我該如何製作一個在30或10秒內發送此通知的版本? –

+0

只需將'60 * 60 * 24'改爲'30'(這是從'now'開始的秒數) – tilo

1

UILocalNotification會適合你的要求Apple doc

+4

請注意downvoting?也許我可以改善答案 – Andrea

2

可以使用UILocalNotification用於此目的。

和實現UIApplicationapplicationWillTerminateapplicationDidEnterBackground代表,如:

- (void)applicationWillTerminate:(UIApplication *)application 
{ 
    [self scheduleNotification]; 
} 

- (void)applicationDidEnterBackground:(UIApplication *)application 
{ 
    [self scheduleNotification]; 
} 

- (void)scheduleNotification 
{ 
    UILocalNotification *locNot = [[UILocalNotification alloc] init]; 
    locNot.fireDate    = [NSDate dateWithTimeIntervalSinceNow:60 * 60 * 24]; 
    [[UIApplication sharedApplication] scheduleLocalNotification: locNot]; 
} 

當你進入到你的應用程序,你需要取消此通知。所以實施applicationDidBecomeActive就好;

- (void)applicationDidBecomeActive:(UIApplication *)application 
{ 
    [[UIApplication sharedApplication] cancelAllLocalNotifications]; 
}