極光推送以及點擊消息進行處理

////? Created by 徐岸 on 2017/5/19.//? Copyright ? 2017年 xuan. All rights reserved.//#import "AppDelegate.h"http:// 引 JPush功能所需頭 件#import "JPUSHService.h"http:// iOS10注冊APNs所需頭 件#define XAPressNewsTVCOne @"XAInformationVCOne"#define XAPushNotification @"XAPushNotification"#ifdef NSFoundationVersionNumber_iOS_9_x_Max#import#endif@interface AppDelegate ()@end

@implementation AppDelegate

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

#if __IPHONE_OS_VERSION_MAX_ALLOWED > __IPHONE_7_1

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

[JPUSHService registerForRemoteNotificationTypes:(UIUserNotificationTypeBadge |UIUserNotificationTypeSound | UIUserNotificationTypeAlert)? ? categories:nil];

} else {

[JPUSHService registerForRemoteNotificationTypes:(UIRemoteNotificationTypeBadge |UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert)

#else

categories:nil];

[JPUSHService registerForRemoteNotificationTypes:(UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert)

#endif

categories:nil];

}

[JPUSHService setupWithOption:launchOptions];

if (launchOptions) {// 判斷是否通知進來 //值得注意的是程序在殺死的情況下就會走當前? didFinishLaunching .. 的方法

//第三中情況就是程序在殺死的情況下,因為程序在殺死的時候你根本就不能接收到通知,所以不能通過通知去做標記,,我在這里采用的是在點擊接收到遠程通知的情況下在偏好設(shè)置里面保存一個值,然后在進入到你的要跳轉(zhuǎn)之前的界面去,判斷是否保存了這個值,保存了這個值就代表你是點擊遠程消息進來的,,在做跳轉(zhuǎn)

NSDictionary * remoteNotification = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];

if (remoteNotification) {

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];

[defaults setObject:@"YES" forKey:@"Notification"];

[defaults synchronize];

}

}

//Required

//notice: 3.0.0及以后版本注冊可以這樣寫,也可以繼續(xù)用之前的注冊方式

JPUSHRegisterEntity * entity = [[JPUSHRegisterEntity alloc] init];

entity.types = JPAuthorizationOptionAlert|JPAuthorizationOptionBadge|JPAuthorizationOptionSound;

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

}

[JPUSHService registerForRemoteNotificationConfig:entity delegate:self];

// Required

// init Push

// notice: 2.1.5版本的SDK新增的注冊 法,改成可上報IDFA,如果沒有使 IDFA直接傳nil

// 如需繼續(xù)使 pushConfig.plist 件聲明appKey等配置內(nèi)容,請依舊使

[JPUSHService setupWithOption:launchOptions appKey:@"你在極光創(chuàng)建應(yīng)用的appKey"

channel:@"App Store"

apsForProduction:YES? // YES代表是生成狀態(tài), NO是發(fā)布狀態(tài)(打包前注意檢查應(yīng)用環(huán)境)

advertisingIdentifier:nil];

return YES;

}

- (void)application:(UIApplication *)application

didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {

/// Required - 注冊 DeviceToken

[JPUSHService registerDeviceToken:deviceToken];

}

// 發(fā)送數(shù)據(jù)給極光 極光幫助程序員保存數(shù)據(jù)

// 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];

}

// 需要執(zhí)行這個方法,選擇是否提醒用戶,有Badge、Sound、Alert三種類型可以選擇設(shè)置

completionHandler(UNNotificationPresentationOptionBadge | UNNotificationPresentationOptionSound | UNNotificationPresentationOptionAlert);

}

// 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];

}

completionHandler();? // 系統(tǒng)要求執(zhí)行這個方法

}

// 遠程推送通知,點擊消息會調(diào)用的方法

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

// Required, iOS 7 Support

[JPUSHService handleRemoteNotification:userInfo];

completionHandler(UIBackgroundFetchResultNewData);

if ([UIApplication sharedApplication].applicationState == UIApplicationStateActive) {

//self.homeVC = (XAHomeController *)[self currentViewController];

// 第一種情況前臺運行? (我的處理是彈出一個彈框在前臺做的提示處理,首先的是你要拿到當前在屏幕顯示的控制器);

NSString *apnCount = userInfo[@"aps"][@"alert"];

UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"溫馨提示您有一條推送信息" message:apnCount delegate:self cancelButtonTitle:@"查看" otherButtonTitles:@"取消", nil];

alert.delegate = self;

[alert show];

}else{

//第二種情況后臺掛起時

[self goToMssageViewControllerWithDict:nil];

}

}

- (void)application:(UIApplication *)application didRegisterUserNotificationSettings:(UIUserNotificationSettings *)notificationSettings{

[application registerForRemoteNotifications];

}

- (void)applicationWillEnterForeground:(UIApplication *)application {

[application setApplicationIconBadgeNumber:0];? //清除角標

[application cancelAllLocalNotifications];

}

//遠程通知跳轉(zhuǎn)

-(void)goToMssageViewControllerWithDict:(NSDictionary *)dict

{

//此處的處理方法是點擊消息跳轉(zhuǎn)界面到指定要跳轉(zhuǎn)之前的控制器1.然后發(fā)送一條通知,2在跳轉(zhuǎn)界面到指定要跳轉(zhuǎn)之前的控制器你去接收通知,,如果接收到通知了就代表是點擊遠程消息進來的,最后進行跳轉(zhuǎn)

UITabBarController *tabBarC = (UITabBarController *)self.window.rootViewController;

// 跳轉(zhuǎn)控制器

tabBarC.selectedIndex = 0;

[[NSNotificationCenter defaultCenter] postNotificationName:XAPushNotification object:nil];

}

/**

注意點? 1.Xcode 8.0要進行開啟遠程通知的權(quán)限,在app 設(shè)置里 ->capabilities開啟

2.如果你集成的極光推送要與你們的后臺服務(wù)器進行對接,那你就要配置一個命名叫PushConfig的plist文件.文件的作用,好像就是告訴后臺一寫信息,里面有三個的key,不知道怎么配就百度下哦.

3.蘋果遠程推送如果你的應(yīng)用正在前臺,是接收不到遠程提示的,但是你能接收到通知的哦,,qq,微信哪種是自定義的處理哦.. 你可以參考我上面的處理,在做操作

4.這里的功能代碼適合的程度是:1.實現(xiàn)app在三種轉(zhuǎn)臺下都能接收到消息的處理,2.實現(xiàn)可自己這邊的后臺服務(wù)器與機關(guān)服務(wù)器的對接功能,可以直接通過自己這邊的服務(wù)器去發(fā)送遠程通知,3.接收到消息能跳轉(zhuǎn)到單個指定的控制器,

*/

/**

常見問題點擊推送消息發(fā)送成功但收不到消息>以及代碼里顯示成功但極光上成功發(fā)送,接收為0的建議:

1.確保你的appKey,證書,推送權(quán)限是否開啟,上線環(huán)境是否匹配.

2.如果你們后臺對接了極光服務(wù)器,你是否配置了PushConfig的plist服務(wù)器.沒有配置是接收不到的

3.檢查代碼,判斷排除,你的代碼接收到了極光發(fā)送過來的通知沒

4.確保是否是因為極光服務(wù)器的延遲導致通知阻塞,或者是極光服務(wù)器炸了,這我真遇到了...

5.一定要加入一下極光群,在官網(wǎng)有哦,關(guān)注下最新的動態(tài),進行交流提問,你面有大神哦.

*/

@end

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容