iOS 消息推送(UserNotifications)

iOS 消息推送?

之前沒怎么關注 這塊 今天要做消息推送 ?就做個記錄 也算是知識的總結啦?

理一理頭緒 ?我們要做這件事 要哪些東西?

1.請求證書?

2.Xcode 打開 接受通知機制 (下面會配圖的)

3.NWPusher?(測試用的)

其他的興趣 你們自己了解 我只介紹如何實現(xiàn)消息推送

一 開始下載配置證書

https://developer.apple.com/account/ios/certificate/? (直接進入 證書界面)

上面寫的明白 檢查一下自己要開發(fā)的App ID 在不在里面?

如果沒有 自己添加一個



這里也是填寫你要用到的id
必須勾選上

創(chuàng)建完成之后 ?回到剛才的頁面 點擊剛才創(chuàng)建的 ID?

沒有配置證書都是 黃色的 ?點擊edit 進入?
勾選上

我們開始請求證書 ?首先要打開鑰匙串??

鑰匙串訪問 -> 證書助理 -> 從證書頒發(fā)機構請求證書..


郵箱我瞎寫的 忽略
知道放到哪里去了 直接保存就好了

好了 我們繼續(xù)生成開發(fā)環(huán)境下的證書

一直點擊下一步 你會看到
選擇你剛才創(chuàng)建的文件?
生成后 直接下載 雙擊安裝就好了 可以在鑰匙串里面找到?

相同的方法 請求發(fā)布版的證書 這里我就不多重復了

在Keychain Access.app里選定這個新證書(Apple Development Push Services*),導出到桌面,保存為Certificates.p12.

終端上執(zhí)行 打包證書

openssl pkcs12 -clcerts -nokeys -out cert.pem -in Certificates.p12

openssl pkcs12 -nocerts -out key.pem -in Certificates.p12

openssl rsa -in key.pem -out key.unencrypted.pem

cat cert.pem key.unencrypted.pem > ck.pem


下載 NWPusher?


使用界面就是這樣的 很簡單,但是對應的正式不要搞錯了 下面的token 是蘋果返回的?

看代碼

- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(nonnull NSData *)deviceToken

{

NSLog(@"deviceToken:%@",deviceToken);

NSString *deviceTokenStr = [[[[deviceToken description]

stringByReplacingOccurrencesOfString:@"<" withString:@""]

stringByReplacingOccurrencesOfString:@">" withString:@""]

stringByReplacingOccurrencesOfString:@" " withString:@""];

NSLog(@"deviceTokenStr:%@",deviceTokenStr);

}

- (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error{

NSLog(@"didFailToRegisterForRemoteNotificationsWithError:%@",error);

}

- (void)userNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification withCompletionHandler:(void (^)(UNNotificationPresentationOptions))completionHandler{

NSLog(@"willPresentNotification:%@",notification.request.content.title);

// 這里真實需要處理交互的地方

// 獲取通知所帶的數(shù)據(jù)

NSString *apsContent = [notification.request.content.userInfo objectForKey:@"aps"];

NSLog(@"%@",apsContent);

}

- (void)userNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void (^)())completionHandler{

//在沒有啟動本App時,收到服務器推送消息瘦穆,下拉消息會有快捷回復的按鈕钮呀,點擊按鈕后調用的方法,根據(jù)identifier來判斷點擊的哪個按鈕

NSString *apsContent = [response.notification.request.content.userInfo objectForKey:@"aps"];

NSLog(@"didReceiveNotificationResponse:%@",response.notification.request.content.title);

NSLog(@"%@",apsContent);

[[UIApplication sharedApplication] setApplicationIconBadgeNumber:0];

}

//遠程推送APP在前臺

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler{

NSLog(@"didReceiveRemoteNotification:%@",userInfo);

}

- (void)setUpCategory

{

UNNotificationAction *action1 = [UNNotificationAction actionWithIdentifier:@"enterApp" title:@"進入應用" options:UNNotificationActionOptionForeground];

UNNotificationAction *action2 = [UNNotificationAction actionWithIdentifier:@"destructive" title:@"忽略" options:UNNotificationActionOptionDestructive];

//UNNotificationCategory *category = [UNNotificationCategory categoryWithIdentifier:@"helloIdentifier" actions:@[action1,action2] minimalActions:@[action1,action2] intentIdentifiers:@[] options:UNNotificationCategoryOptionNone];

UNNotificationCategory *caregory = [UNNotificationCategory categoryWithIdentifier:@"helloIdentifier" actions:@[action1,action2] intentIdentifiers:@[action1,action2] options:UNNotificationCategoryOptionNone];

[[UNUserNotificationCenter currentNotificationCenter] setNotificationCategories:[NSSet setWithObjects:caregory, nil]];

}

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

// Override point for customization after application launch.

// iOS10 下需要使用新的 API

if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 10.0) {

#ifdef NSFoundationVersionNumber_iOS_9_x_Max

UNUserNotificationCenter* center = [UNUserNotificationCenter currentNotificationCenter];

[center requestAuthorizationWithOptions:(UNAuthorizationOptionAlert + UNAuthorizationOptionSound + UNAuthorizationOptionBadge)

completionHandler:^(BOOL granted, NSError * _Nullable error) {

// Enable or disable features based on authorization.

if (granted) {

[application registerForRemoteNotifications];

}

}];

center.delegate = self;

#endif

}

else if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0) {

UIUserNotificationType myTypes = UIUserNotificationTypeBadge | UIUserNotificationTypeSound | UIUserNotificationTypeAlert;

UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:myTypes categories:nil];

[[UIApplication sharedApplication] registerUserNotificationSettings:settings];

}

NSDictionary *userInfo = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];

if (userInfo) {

NSLog(@"從消息啟動:%@",userInfo);

//? ? ? ? [BPush handleNotification:userInfo];

}

//角標清0

[[UIApplication sharedApplication] setApplicationIconBadgeNumber:0];

return YES;

}

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo

{

NSLog(@"didReceiveRemoteNotification : %@",userInfo);

[[UIApplication sharedApplication] setApplicationIconBadgeNumber:0];

}

- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification{

NSLog(@"notification : %@",notification);

}


- (void)applicationDidBecomeActive:(UIApplication *)application //后臺切換到前臺的 或者應用激活的時候調用

{

// 清除圖標數(shù)字

application.applicationIconBadgeNumber = 0;

}


下面開始 Xcode 里面的設置


后臺設置?


關于消息推送和服務器的交互 還有角標的清除 我會在下篇文章里面介紹 謝謝
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末余掖,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子年扩,更是在濱河造成了極大的恐慌慌申,老刑警劉巖吭净,帶你破解...
    沈念sama閱讀 206,968評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件睡汹,死亡現(xiàn)場離奇詭異,居然都是意外死亡寂殉,警方通過查閱死者的電腦和手機囚巴,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來友扰,“玉大人彤叉,你說我怎么就攤上這事〈骞郑” “怎么了秽浇?”我有些...
    開封第一講書人閱讀 153,220評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長甚负。 經常有香客問我柬焕,道長,這世上最難降的妖魔是什么梭域? 我笑而不...
    開封第一講書人閱讀 55,416評論 1 279
  • 正文 為了忘掉前任斑举,我火速辦了婚禮,結果婚禮上病涨,老公的妹妹穿的比我還像新娘富玷。我一直安慰自己,他們只是感情好既穆,可當我...
    茶點故事閱讀 64,425評論 5 374
  • 文/花漫 我一把揭開白布凌彬。 她就那樣靜靜地躺著,像睡著了一般循衰。 火紅的嫁衣襯著肌膚如雪铲敛。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,144評論 1 285
  • 那天会钝,我揣著相機與錄音伐蒋,去河邊找鬼。 笑死迁酸,一個胖子當著我的面吹牛先鱼,可吹牛的內容都是我干的。 我是一名探鬼主播奸鬓,決...
    沈念sama閱讀 38,432評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼焙畔,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了串远?” 一聲冷哼從身側響起宏多,我...
    開封第一講書人閱讀 37,088評論 0 261
  • 序言:老撾萬榮一對情侶失蹤儿惫,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后伸但,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體肾请,經...
    沈念sama閱讀 43,586評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,028評論 2 325
  • 正文 我和宋清朗相戀三年更胖,在試婚紗的時候發(fā)現(xiàn)自己被綠了铛铁。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,137評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡却妨,死狀恐怖饵逐,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情彪标,我是刑警寧澤梳毙,帶...
    沈念sama閱讀 33,783評論 4 324
  • 正文 年R本政府宣布,位于F島的核電站捐下,受9級特大地震影響,放射性物質發(fā)生泄漏萌业。R本人自食惡果不足惜坷襟,卻給世界環(huán)境...
    茶點故事閱讀 39,343評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望生年。 院中可真熱鬧婴程,春花似錦、人聲如沸抱婉。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽蒸绩。三九已至衙四,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間患亿,已是汗流浹背传蹈。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留步藕,地道東北人惦界。 一個月前我還...
    沈念sama閱讀 45,595評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像咙冗,于是被迫代替她去往敵國和親沾歪。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,901評論 2 345

推薦閱讀更多精彩內容