最近項目集成推送功能,我把總體的集成步驟及推送功能實現服務器
功能實現: @在登陸狀態下,纔可推送消息成功,退出登陸狀態,不可推送消息app
@應用程序在後臺掛起狀態下,可實現推送,進入相應界面ide
@應用程序在前臺狀況下,不管任何界面,可實現推送給,並進入相應界面--聲音設置fetch
@應用程序被殺死,但登陸過狀態下,還能收到消息ui
須要在登陸時,設置alias,退出登陸時,清除aliasurl
- #import "JPUSHService.h"// 引入JPush功能所需頭文件
- #ifdef NSFoundationVersionNumber_iOS_9_x_Max// iOS10註冊APNs所需頭文件
- #import <UserNotifications/UserNotifications.h>
- #endif
- //#import <AdSupport/AdSupport.h>// 若是須要使用idfa功能所須要引入的頭文件(可選)
- #define JPushAppKey @"9961aac66c9ee59685fb1d4e"//推送的appkey
- #define JPushChannel @"App Store"
- #ifdef DEBUG//0 (默認值)表示採用的是開發證書,1 表示採用生產證書發佈應用。
- #define isProduction NO
- #else
- #define isProduction YES
- #endif
- // iOS 10 Support 推送放放- 播放聲音設置
- - (void)jpushNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification withCompletionHandler:(void (^)(NSInteger))completionHandler {
- // Required 收到的推送消息
- NSDictionary * userInfo = notification.request.content.userInfo;
- if([notification.request.trigger isKindOfClass:[UNPushNotificationTrigger class]]) {
- [JPUSHService handleRemoteNotification:userInfo];
- // 添加各類需求。。。。。
- //組裝並播放音效
- SystemSoundID soundID = 1000;
- //NSString *path = [[NSBundle mainBundle] pathForResource:@"video_new" ofType:@"caf"];
- NSURL *url = [[NSBundle mainBundle] URLForResource:@"video_new" withExtension:@"caf"];
- if (url) {
- OSStatus error = AudioServicesCreateSystemSoundID((__bridge CFURLRef)url,&soundID);
- if (error != kAudioServicesNoError) {//獲取的聲音的時候,出現錯誤
- soundID = 1000;
- }
- }
- AudioServicesPlaySystemSound(soundID);
- AudioServicesPlaySystemSound(kSystemSoundID_Vibrate);//震動
- }
- completionHandler(UNNotificationPresentationOptionAlert);
- // 須要執行這個方法,選擇是否提醒用戶,有Badge、Sound、Alert三種類型能夠選擇設置
- }
- //註冊APNs成功並上報DeviceToken
- - (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
- // Required - 註冊 DeviceToken
- [JPUSHService registerDeviceToken:deviceToken];
- NSLog(@"√√√√√%@",[JPUSHService registrationID]);//同一設備 卸載從新安裝登陸都不一樣
- //得到註冊後的regist_id,此值通常傳給後臺作推送的標記用,先存儲起來
- _registerid = [JPUSHService registrationID];
- //提交register_id給後臺(此方法爲後臺提供)
- if (ApplicationDelegate.isLogin) {
- if ([_registerid length]) {
- [self giveRegisterId:[JPUSHService registrationID]];
- }
- }
- //設置別名,提交得到的register_id給後臺
- // 這是極光提供的方法,USER_INFO.userID是用戶的id,你能夠根據帳號或者其餘來設置,只要保證惟一即可
- NSSet *set2 = [[NSSet alloc] initWithObjects:_registerid, nil];
- [JPUSHService setTags:set2 alias:_registerid fetchCompletionHandle:^(int iResCode, NSSet *iTags, NSString *iAlias) {
- NSLog(@"設置結果:%i 用戶別名:%@",iResCode,@"USER_INFO.userID");
- }];
- }
- //刪除推送的alias
- [JPUSHService deleteAlias:^(NSInteger iResCode, NSString *iAlias, NSInteger seq) {
- NSLog(@"rescode: %ld, \ntags: %@, \nalias: %@\n", (long)iResCode, @"tag" , iAlias);
- } seq:0];
擴展:極光推送中的定向推送
極光推送中,不使用廣播推送,那麼怎樣作到定向推送,是開發者和需求必定會出現的問題,極光推送中能夠有兩個惟一值:
(1)註冊Jpush成功後生成的registrationID,這個registrationID是標記設備惟一性的,你發現,當你在啓動屢次,註冊Jpush時,這個值是不變的;在同一個設備上,更換用戶登陸,這個值仍然不變;最後,你刪除應用程序,再下載時啓動註冊Jpush,這個值仍是不變。這就能夠定向向某臺設備作推送,若是你能給本身的服務器上傳這個值,而且給這個值綁定一些東西,是否是能夠作更多事情呢。
(2)alias:只要瞭解極光推送的都知道這是設置別名的,官方文檔上說明了這個值不是惟一的,可是建議開發者把它做爲用戶的惟一標記。我以爲這個做爲惟一值是最好的,當你想定向向某個用戶作推送,或者召喚他迴歸咱們的應用程序,這個值就太好了。你能夠將它設置爲userId,這個時候推送就能知道向哪一個用戶發了。spa
連接:https://www.jianshu.com/p/6cca682a2892代理
連接:https://www.jianshu.com/p/6a6166aadfe7code