你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> iOS消息機制

iOS消息機制

編輯:IOS開發綜合

一、本地推送

iOS 推送通知分為本地推送和遠程推送通知,遠程推送通知就類似於我們平時使用微信時,即使鎖屏了,也能收到好友發送給我們的消息,然後在主屏幕顯示一個alertview,遠程推送需要遠程服務端的支持,比較復雜. 本地推送相對比較簡單,不需要服務端的支持。

本地通知是NSLocalNotification 實現的,通過實例化一個NSLocalNotification類型的通知,同時設置通知的fireDate 屬性,即通知的觸發時間;設置timeZone屬性,即時區;設置alertBody,顯示的內容;設置alertAction;設置soundName,即推送發生時的聲音;設置applicationIconBadgeNumber,即圖標上的數字;設置userInfo屬性,該屬性是一個NSDictionary類型的變量。然後在使用UIApplication 的 實例方法scheduleLocalNotification:或 presentLocalNotificationNow: 推送通知。

* 1、創建本地推送 *

// 創建一個本地推送  
UILocalNotification *notification = [[[UILocalNotification alloc] init] autorelease];  
//設置10秒之後  
NSDate *pushDate = [NSDate dateWithTimeIntervalSinceNow:10];  
if (notification != nil) {  
    // 設置推送時間  
    notification.fireDate = pushDate;   
    //推送時區設置:從網上搜到 
    //timeZone是UILocalNotification激發時間是否根據時區改變而改變,如果設置為nil的話,
    //那麼UILocalNotification將在一段時候後被激發,而不是某一個確切時間被激發。
    notification.timeZone = [NSTimeZone defaultTimeZone];  
    // 設置重復間隔,若不設置將只會推送1次  
    notification.repeatInterval = kCFCalendarUnitDay;  
    // 推送聲音,(若不設置的話系統推送時會無聲音) 
    notification.soundName = UILocalNotificationDefaultSoundName;  
    // 推送內容,(若不設置,推送中心中不顯示文字,有聲音提示前提是設置有聲音)  
    notification.alertBody = @推送內容;  
    //推送時小圖標的設置,PS:這個東西不知道還有啥用  
    notification.alertLaunchImage=[[NSBundle mainBundle]pathForResource:@3 ofType:@jpg];  
    //顯示在icon上的紅色圈中的數子  
    notification.applicationIconBadgeNumber = 1;  
    //設置userinfo 方便在之後需要撤銷的時候使用  
    NSDictionary *info = [NSDictionary dictionaryWithObject:@nameforKey:@key];  
    notification.userInfo = info;  

    //講推送設置以及信息加入  
    UIApplication* app=[UIApplication sharedApplication];  
    BOOL status=YES;  
    for (UILocalNotification* notification in app.scheduledLocalNotifications)   
    {  
        if ([notification.userInfo objectForKey:@key]) {  
           status=NO;  
        }  
    }  

     if (status) {  
        //加入推送(只能加入一次)  
        [app scheduleLocalNotification:notification];  
     }  

}  

* 2、接收本地推送 *

- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification*)notification{  
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@iWeibo message:notification.alertBody delegate:nil cancelButtonTitle:@確定 otherButtonTitles:nil];  
    [alert show];  
    // 圖標上的數字減1  
    application.applicationIconBadgeNumber -= 1;  
} 

* 3、解除本地推送 *

// 獲得 UIApplication  
UIApplication *app = [UIApplication sharedApplication];  
//獲取本地推送數組  
NSArray *localArray = [app scheduledLocalNotifications];  
//聲明本地通知對象  
UILocalNotification *localNotification;  
if (localArray) {  
    for (UILocalNotification *noti in localArray) {  
        NSDictionary *dict = noti.userInfo;  
        if (dict) {  
            NSString *inKey = [dict objectForKey:@key];  
            if ([inKey isEqualToString:@對應的key值]) {  
                if (localNotification){  
                    [localNotification release];  
                    localNotification = nil;  
                }  
                localNotification = [noti retain];  
                break;  
            }  
        }  
    }  

    //判斷是否找到已經存在的相同key的推送  
    if (!localNotification) {  
        //不存在初始化  
        localNotification = [[UILocalNotification alloc] init];  
    }  

    if (localNotification) {  
        //不推送 取消推送  
        [app cancelLocalNotification:localNotification];  
        [localNotification release];  
        return;  
    }  
}

 

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved