1:APNs通知與應用內消息對比ios
極光文檔上面是這麼寫的json
後來更直接的說法是:xcode
2:下面是介紹app不一樣狀態下面接受到通知調用的方法:服務器
// iOS 10 Support,這個是程序在前臺接受到通知是相應的方法app
- (void)jpushNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification withCompletionHandler:(void (^)(NSInteger))completionHandler {less
// Requiredide
NSDictionary * userInfo = notification.request.content.userInfo;測試
if([notification.request.trigger isKindOfClass:[UNPushNotificationTrigger class]]) {fetch
[JPUSHService handleRemoteNotification:userInfo];ui
}
//若是是前臺收到了通知,也能夠設置提醒,具體的需求問問產品
completionHandler(UNNotificationPresentationOptionNone); // 須要執行這個方法,選擇是否提醒用戶,有Badge、Sound、Alert三種類型能夠選擇設置
}
能夠經過上面的枚舉對前臺通知進行設置
// iOS 10 Support程序運行於後臺 點擊推送通知 都會走這個方法
- (void)jpushNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void (^)())completionHandler {
// Required
NSDictionary * userInfo = response.notification.request.content.userInfo;
if([response.notification.request.trigger isKindOfClass:[UNPushNotificationTrigger class]]) {
[JPUSHService handleRemoteNotification:userInfo];
}
NSLog(@"%@",response.notification.request.content.body);
completionHandler(); // 系統要求執行這個方法
}
//程序已經殺死
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
[Bugly startWithAppId:@"49c45f90fe"];
//遠程推送發送過來json字符串
NSDictionary *userinfo = launchOptions[UIApplicationLaunchOptionsRemoteNotificationKey];
通知的內容存在於launchOptions中
NSDictionary *userinfo = launchOptions[UIApplicationLaunchOptionsRemoteNotificationKey];
userinfo[@"aps"][@"alert"]
裏面能夠獲取到通知的內容
//靜默通知(靜默通知app死掉的時候不進行)
靜默推送:收到推送(沒有文字沒有聲音),不用點開通知,不用打開APP,就能執行
使用靜默通知的關鍵意義是程序在後臺的時候可以在不點擊通知的(應爲靜默通知自己就沒有通知欄)敲敲的執行後臺的代碼
無論使用哪一種三方的推送(極光,融雲,個推,pushmeBaby),必定要設置
必定要加"content-available" : 1 (只設置這個字段的話,能夠實現後臺推送完成接收)
還有
sound,alert badge也不能加,加入的話也是靜默推送,能夠測試時添加
實例靜默推送內容
由於靜默推送的關鍵意義在於後臺的推鬆,因此必定要記得打開app後臺推送的功能
若是升級了ios10,必定要按照最新的文檔進行集成
注意:
1:應當提供
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler { // Required, iOS 7 Support [JPUSHService handleRemoteNotification:userInfo]; completionHandler(UIBackgroundFetchResultNewData); } - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo { // Required,For systems with less than or equal to iOS6 [JPUSHService handleRemoteNotification:userInfo]; }
下面的方法會被上面的方法擠掉
若是想收到靜默通知,必須實現上面的方法而不是下面的
即靜默採用ios 7的方法替換原來的
2:關於證書:若是本身公司的後臺集成了極光推送,應當提供好推送的兩個證書的p12文件
生產證書不必定要上線
3:判斷程序在前臺的方法
[UIApplication sharedApplication].applicationState == UIApplicationStateActive
4:極光推送不展現小紅點
application.applicationIconBadgeNumber = 0;
[JPUSHService setBadge:0];(推向極光的服務器)
關於通知的補充:
1:收到前臺通知調用的方法
2:通知上面添加的點擊事件,經過通知設置分類
點擊上面不一樣的按鈕調用下面的方法,經過identifier進行區分
3:
4.繼承公司本身的推送只須要
appdelegate裏面設置appid便可
5:後臺進行的靜默通知,應該進行流量的判斷
下面是上網查的某位大神的關於靜默推送的相關知識點(只是借鑑一下)
注意:關於設置badgeNumber
關於別名:
設置別名退出的時候記得清空別名
[JPUSHService setTags:nil alias:[RFMyInfoSaveTool shareMyInfoTools].userName fetchCompletionHandle:^(int iResCode, NSSet *iTags, NSString *iAlias) {
NSLog(@"%d-------------%@,-------------%@",iResCode,iTags,iAlias);
}];
2.設置監聽登陸策劃成功的方法:
[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(setAlis) name:kJPFNetworkDidLoginNotification object:nil];
在登陸成功的通知方法裏面設置別名
可是爲了防止登陸以後已經註冊好了,可是登陸者的手機號還未上傳進來,咱們應當到登陸成功的回調裏面再次設置別名
//覆蓋可能爲空的別名
[JPUSHService setTags:nil alias:[RFMyInfoSaveTool shareMyInfoTools].userName fetchCompletionHandle:^(int iResCode, NSSet *iTags, NSString *iAlias) {
NSLog(@"%d-------------%@,-------------%@",iResCode,iTags,iAlias);
}];
記得退出app的時候清空別名,否則退出了app還能收到通知,不符合產品的要求
3.發佈的時候記得作的事情
1>記得將推送的發佈證書轉成p12傳給極光的後臺,若是是本身的後臺進行維護的,就給本身的後臺
2>記得打開xcode的推送的模式
3>測試推送ipa的時候記得選中極光的開發模式,不然ipa是收不到推送通知的