三冠桃、<iOS 遠(yuǎn)程推送> 靜默推送

靜默推送是干嘛的?有什么作用道宅,蘋果為何提供靜默推送食听?如何去觸發(fā)靜默通知?

一污茵、靜默通知調(diào)用方法的研讀

通過觀看 WWDC 樱报,方知有個(gè)靜默通知東東,于是想著如何實(shí)現(xiàn)它泞当,它有什么注意點(diǎn)迹蛤?通過后面查詢資料才知道,靜默遠(yuǎn)程通知會(huì)調(diào)用如下的方法。

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult result))completionHandler NS_AVAILABLE_IOS(7_0);

上面的方法作用是告訴應(yīng)用盗飒,遠(yuǎn)程通知已經(jīng)來了穷缤,遠(yuǎn)程通知捎點(diǎn)東西,讓應(yīng)用自己去拿一下箩兽。


參數(shù)說明

  • application application 單例對象津肛。

  • userInfo 這個(gè)參數(shù)是遠(yuǎn)程通知帶來的東西,userInfo 里面可能包含 badge 和 通知聲音汗贫,和通知展示給用戶的信息身坐,通知的標(biāo)識和自定義的數(shù)據(jù)哦。遠(yuǎn)程服務(wù)器推送的內(nèi)容是 Json 格式的字典落包,而 iOS 會(huì)將其推送的內(nèi)容轉(zhuǎn)化成 NSDictonary 對象部蛇。

  • handler 當(dāng)下載操作完成時(shí),handler 將會(huì)被執(zhí)行咐蝇。當(dāng)調(diào)用 handler 方法時(shí)涯鲁,請傳入 UIBackgroundFetchResult 枚舉值最能描述下載操作結(jié)果。你一定要盡快的調(diào)用 handler 方法


UIBackgroundFetchResult 枚舉的意思


二有序、討論
  • 1抹腿、 靜默通知能下載多久?
    有30秒的下載時(shí)間
    官方說明:Your app has up to 30 seconds of wall-clock time to process the notification and call the specified completion handler block. In practice, you should call the handler block as soon as you are done processing the notification旭寿。
  • 2警绩、靜默通知能在前臺下載嗎?
    已經(jīng)驗(yàn)證盅称,是前臺和后臺都能下載肩祥。

  • 3、靜默通知后臺下載有限制嗎缩膝?
    有限制混狠,蘋果會(huì)監(jiān)聽下載的時(shí)間、電量消耗疾层。如果應(yīng)用處理靜默通知下載去花費(fèi)太多的電量将饺,將來的靜默通知可能不能及時(shí)喚醒應(yīng)用的。
    官方說明: The system tracks the elapsed time, power usage, and data costs for your app’s background downloads. Apps that use significant amounts of power when processing remote notifications may not always be woken up early to process future notifications.


三云芦、配置和代碼實(shí)現(xiàn)
  • 1俯逾、配置
    如果你不明如何配置遠(yuǎn)程推送證書,請參考從零開始創(chuàng)建iOS遠(yuǎn)程推送證書里面有舅逸,教你如何配置推送證書桌肴。
    另外要在 Xcode 中操作兩個(gè)步驟,一個(gè)是允許后臺下載琉历,另一個(gè)是允許接受遠(yuǎn)程通知坠七。
    允許后臺下載
允許接受遠(yuǎn)程通知
  • 2水醋、代碼
#import "AppDelegate.h"
#ifdef NSFoundationVersionNumber_iOS_9_x_Max
#import <UserNotifications/UserNotifications.h>
#endif

@interface AppDelegate ()<UNUserNotificationCenterDelegate>

@end

@implementation AppDelegate


- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    
    //注冊通知
    if ([[UIDevice currentDevice].systemVersion doubleValue]>= 10.0) {
        //iOS 10 特有
        UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
        [center requestAuthorizationWithOptions:UNAuthorizationOptionBadge | UNAuthorizationOptionAlert | UNAuthorizationOptionSound completionHandler:^(BOOL granted, NSError * _Nullable error) {
            if (granted) {
                NSLog(@"打印成功");
            }
        }];
        center.delegate = self;
        
    }else if([[UIDevice currentDevice].systemVersion doubleValue]>8){
        //分類
        UIMutableUserNotificationCategory *category = [[UIMutableUserNotificationCategory alloc] init];
        
        //分類標(biāo)識
        category.identifier = @"iOS 8 Category id";
        
        UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeBadge | UIUserNotificationTypeSound | UIUserNotificationTypeAlert categories:[NSSet setWithObject:category]];
        
        [application registerUserNotificationSettings:settings];
    }
    [[UIApplication sharedApplication] registerForRemoteNotifications];
    return YES;
}
#pragma mark - iOS 10 通知
- (void)userNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification withCompletionHandler:(void (^)(UNNotificationPresentationOptions options))completionHandler {
    NSLog(@"helloworld");
    completionHandler(UNNotificationPresentationOptionSound|UNNotificationPresentationOptionAlert);
}
// The method will be called on the delegate when the user responded to the notification by opening the application, dismissing the notification or choosing a UNNotificationAction. The delegate must be set before the application returns from applicationDidFinishLaunching:.
- (void)userNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void(^)())completionHandler{
    
    completionHandler();
}

-(void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken{
    NSLog(@"%@",[NSString stringWithFormat:@"device Token %@",deviceToken]);
}


-(void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error{
    if (error) {
        NSLog(@"%@",error);
    }
}

-(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo{
    NSLog(@"iOS 10 以下收到通知");
}

#pragma mark -  靜默通知
-(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler{
    NSDictionary *dict = userInfo[@"aps"];
    NSLog(@"%@",dict[@"name"]);
    completionHandler(UIBackgroundFetchResultNewData);
}

@end

四、推送遠(yuǎn)程內(nèi)容

提供一個(gè)強(qiáng)大的基于 MAC 的推送服務(wù)器彪置,SmartPush拄踪。運(yùn)行 Xcode 會(huì)出現(xiàn)如下圖的彈框。

Snip20170727_42.png

注意:請使用最新的 notification 格式

  • 不能加alert拳魁,如果加入了alert就不是靜默推送了惶桐,本人試過。
  • 務(wù)必加"content-available" : 1
  • sound感覺也不能加潘懊,加入的話就不是靜默推送姚糊,但是我在測試中有加入,也是可以的授舟,建議不要加救恨。

服務(wù)器推送的內(nèi)容如下。

{
    "aps": { "content-available" :  1,"name":"oliver"
            }
}

如果服務(wù)器推送的內(nèi)容包含 alert 就不是靜默推送了释树,就是 一般的遠(yuǎn)程推送啦肠槽。

 {
 "aps": {
 "alert": "This is some fancy message.",
 "badge": 1,
 "sound": "default",
 "mutable-content": "1",
 "imageAbsoluteString": "http://www.gaoxiaogif.com/d/file/201707/small1dd8ecd6f646f3785778c92ae68bcfda.gif"
 ,
 "title" :"noticefyTitle",
 "subtitle":"subtittle","fileType":"gif"
 }
 }

五、結(jié)語

靜默通知是讓應(yīng)用在后臺悄悄的下載東東奢啥,這樣用戶啟動(dòng)應(yīng)用時(shí)秸仙,會(huì)給用戶一種驚喜,蘋果還是為了提高用戶體驗(yàn)出發(fā)的扫尺。
如果不正確的地方筋栋,請告知,感恩Uぁ!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末抢腐,一起剝皮案震驚了整個(gè)濱河市姑曙,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌迈倍,老刑警劉巖伤靠,帶你破解...
    沈念sama閱讀 219,366評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異啼染,居然都是意外死亡宴合,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,521評論 3 395
  • 文/潘曉璐 我一進(jìn)店門迹鹅,熙熙樓的掌柜王于貴愁眉苦臉地迎上來卦洽,“玉大人,你說我怎么就攤上這事斜棚》У伲” “怎么了该窗?”我有些...
    開封第一講書人閱讀 165,689評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長蚤霞。 經(jīng)常有香客問我酗失,道長,這世上最難降的妖魔是什么昧绣? 我笑而不...
    開封第一講書人閱讀 58,925評論 1 295
  • 正文 為了忘掉前任规肴,我火速辦了婚禮,結(jié)果婚禮上夜畴,老公的妹妹穿的比我還像新娘奏纪。我一直安慰自己,他們只是感情好斩启,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,942評論 6 392
  • 文/花漫 我一把揭開白布序调。 她就那樣靜靜地躺著,像睡著了一般兔簇。 火紅的嫁衣襯著肌膚如雪发绢。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,727評論 1 305
  • 那天垄琐,我揣著相機(jī)與錄音边酒,去河邊找鬼。 笑死狸窘,一個(gè)胖子當(dāng)著我的面吹牛墩朦,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播翻擒,決...
    沈念sama閱讀 40,447評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼氓涣,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了陋气?” 一聲冷哼從身側(cè)響起劳吠,我...
    開封第一講書人閱讀 39,349評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎巩趁,沒想到半個(gè)月后痒玩,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,820評論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡议慰,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,990評論 3 337
  • 正文 我和宋清朗相戀三年蠢古,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片别凹。...
    茶點(diǎn)故事閱讀 40,127評論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡草讶,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出番川,到底是詐尸還是另有隱情到涂,我是刑警寧澤脊框,帶...
    沈念sama閱讀 35,812評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站践啄,受9級特大地震影響浇雹,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜屿讽,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,471評論 3 331
  • 文/蒙蒙 一昭灵、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧伐谈,春花似錦烂完、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,017評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至履澳,卻和暖如春嘶窄,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背距贷。 一陣腳步聲響...
    開封第一講書人閱讀 33,142評論 1 272
  • 我被黑心中介騙來泰國打工柄冲, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人忠蝗。 一個(gè)月前我還...
    沈念sama閱讀 48,388評論 3 373
  • 正文 我出身青樓现横,卻偏偏與公主長得像,于是被迫代替她去往敵國和親阁最。 傳聞我的和親對象是個(gè)殘疾皇子戒祠,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,066評論 2 355

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,182評論 25 707
  • 寫作原因:網(wǎng)上看了很多推送文章都沒有完美的解答我的疑惑;主要有以下兩點(diǎn)闽撤,1:推送來了我點(diǎn)擊應(yīng)用圖標(biāo)進(jìn)入應(yīng)用怎么取到...
    Thebloodelves閱讀 4,511評論 26 71
  • 顧城詩集摘選 水鄉(xiāng) 清明 淡紫色的風(fēng) 顫動(dòng)著—— 溶去了繁雜得哆、喧嚷 花臺布 和那布滿油跡的曲調(diào)…...
    蝸牛不會(huì)飛閱讀 501評論 0 1
  • 河水喜愛春天 但是對與冬天也是無奈 河水修長的倩影,暗戀著春風(fēng) 纏綿的情話哟旗,秋雨一般溫柔,綿長 無奈春風(fēng)無情栋操,轉(zhuǎn)身...
    泰安左眼皮跳跳閱讀 209評論 0 8
  • 認(rèn)識這個(gè)女生是因?yàn)楦改冈谝黄鸸ぷ髡⒉停醮我娒婵吹贸觥K龑ξ壹乙磺宥剑彝サ脑蚴堑谝灰蛩亍?喜歡舍沙,喜不喜歡,只是很...
    potato_車阿明閱讀 290評論 0 0