iOS 極光推送集成

最近項目集成推送功能,我把總體的集成步驟及推送功能實現服務器

功能實現: @在登陸狀態下,纔可推送消息成功,退出登陸狀態,不可推送消息app

@應用程序在後臺掛起狀態下,可實現推送,進入相應界面ide

@應用程序在前臺狀況下,不管任何界面,可實現推送給,並進入相應界面--聲音設置fetch

@應用程序被殺死,但登陸過狀態下,還能收到消息ui

須要在登陸時,設置alias,退出登陸時,清除aliasurl

1.在 JPush的管理Portal 上建立應用並上傳APNs證書或經過 APNs Auth Key 鑑權

2.添加頭文件到 AppDelegate.m中

  1. #import "JPUSHService.h"// 引入JPush功能所需頭文件
  2. #ifdef NSFoundationVersionNumber_iOS_9_x_Max// iOS10註冊APNs所需頭文件
  3. #import <UserNotifications/UserNotifications.h>
  4. #endif
  5. //#import <AdSupport/AdSupport.h>// 若是須要使用idfa功能所須要引入的頭文件(可選)
  6. #define JPushAppKey  @"9961aac66c9ee59685fb1d4e"//推送的appkey
  7. #define JPushChannel  @"App Store"
  8. #ifdef DEBUG//0 (默認值)表示採用的是開發證書,1 表示採用生產證書發佈應用。
  9. #define isProduction     NO
  10. #else
  11. #define isProduction     YES
  12. #endif

3.初始化APNs(JPush的註冊,初始化都放在此代理方法中實現,app未開啓狀態下的推送,也會走此代理方法).註冊APNs成功並上報DeviceToken給極光服務器 . 設置別名,提交得到的register_id給後臺

  1. // iOS 10 Support 推送放放- 播放聲音設置
  2. - (void)jpushNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification withCompletionHandler:(void (^)(NSInteger))completionHandler {
  3.     // Required 收到的推送消息
  4.     NSDictionary * userInfo = notification.request.content.userInfo;
  5.     if([notification.request.trigger isKindOfClass:[UNPushNotificationTrigger class]]) {
  6.         [JPUSHService handleRemoteNotification:userInfo];
  7.         // 添加各類需求。。。。。
  8.         //組裝並播放音效
  9.         SystemSoundID soundID = 1000;
  10.         //NSString *path = [[NSBundle mainBundle] pathForResource:@"video_new" ofType:@"caf"];
  11.         NSURL *url = [[NSBundle mainBundle] URLForResource:@"video_new" withExtension:@"caf"];
  12.         if (url) {
  13.             OSStatus error = AudioServicesCreateSystemSoundID((__bridge CFURLRef)url,&soundID);
  14.             if (error != kAudioServicesNoError) {//獲取的聲音的時候,出現錯誤
  15.                 soundID = 1000;
  16.             }
  17.         }
  18.         AudioServicesPlaySystemSound(soundID);
  19.         AudioServicesPlaySystemSound(kSystemSoundID_Vibrate);//震動
  20.     }
  21.     completionHandler(UNNotificationPresentationOptionAlert);
  22.     // 須要執行這個方法,選擇是否提醒用戶,有Badge、Sound、Alert三種類型能夠選擇設置
  23. }
  • //註冊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");
  •     }];
  • }

4.在推出登陸部分,清除別名,實現推出登陸狀態獲取不到推送消息

  1. //刪除推送的alias
  2. [JPUSHService deleteAlias:^(NSInteger iResCode, NSString *iAlias, NSInteger seq) {
  3. NSLog(@"rescode: %ld, \ntags: %@, \nalias: %@\n", (long)iResCode, @"tag" , iAlias);
  4. } seq:0];

 

擴展:極光推送中的定向推送
極光推送中,不使用廣播推送,那麼怎樣作到定向推送,是開發者和需求必定會出現的問題,極光推送中能夠有兩個惟一值:
(1)註冊Jpush成功後生成的registrationID,這個registrationID是標記設備惟一性的,你發現,當你在啓動屢次,註冊Jpush時,這個值是不變的;在同一個設備上,更換用戶登陸,這個值仍然不變;最後,你刪除應用程序,再下載時啓動註冊Jpush,這個值仍是不變。這就能夠定向向某臺設備作推送,若是你能給本身的服務器上傳這個值,而且給這個值綁定一些東西,是否是能夠作更多事情呢。
(2)alias:只要瞭解極光推送的都知道這是設置別名的,官方文檔上說明了這個值不是惟一的,可是建議開發者把它做爲用戶的惟一標記。我以爲這個做爲惟一值是最好的,當你想定向向某個用戶作推送,或者召喚他迴歸咱們的應用程序,這個值就太好了。你能夠將它設置爲userId,這個時候推送就能知道向哪一個用戶發了。spa



連接:https://www.jianshu.com/p/6cca682a2892代理

連接:https://www.jianshu.com/p/6a6166aadfe7code

相關文章
相關標籤/搜索