1
|
#import
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
- (
BOOL
)application:(UIApplication *)application didFinishLaunchingWithOptions:(
NSDictionary
*)launchOptions {
// Override point for customization after application launch.
/* APP未启动,点击推送消息的情况下 iOS10遗弃UIApplicationLaunchOptionsLocalNotificationKey,使用代理UNUserNotificationCenterDelegate方法didReceiveNotificationResponse:withCompletionHandler:获取本地推送
*/
// NSDictionary *localUserInfo = launchOptions[UIApplicationLaunchOptionsLocalNotificationKey];
// if (localUserInfo) {
// NSLog(@"localUserInfo:%@",localUserInfo);
// //APP未启动,点击推送消息
// }
NSDictionary
*remoteUserInfo = launchOptions[UIApplicationLaunchOptionsRemoteNotificationKey];
if
(remoteUserInfo) {
NSLog
(@
"remoteUserInfo:%@"
,remoteUserInfo);
//APP未启动,点击推送消息,iOS10下还是跟以前一样在此获取
}
return
YES
;
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
|
- (
void
)registerNotification{
/*
identifier:行为标识符,用于调用代理方法时识别是哪种行为。
title:行为名称。
UIUserNotificationActivationMode:即行为是否打开APP。
authenticationRequired:是否需要解锁。
destructive:这个决定按钮显示颜色,YES的话按钮会是红色。
behavior:点击按钮文字输入,是否弹出键盘
*/
UNNotificationAction *action1 = [UNNotificationAction actionWithIdentifier:@
"action1"
title:@
"策略1行为1"
options:UNNotificationActionOptionForeground];
/*iOS9实现方法
UIMutableUserNotificationAction * action1 = [[UIMutableUserNotificationAction alloc] init];
action1.identifier = @"action1";
action1.title=@"策略1行为1";
action1.activationMode = UIUserNotificationActivationModeForeground;
action1.destructive = YES;
*/
UNTextInputNotificationAction *action2 = [UNTextInputNotificationAction actionWithIdentifier:@
"action2"
title:@
"策略1行为2"
options:UNNotificationActionOptionDestructive textInputButtonTitle:@
"textInputButtonTitle"
textInputPlaceholder:@
"textInputPlaceholder"
];
/*iOS9实现方法
UIMutableUserNotificationAction * action2 = [[UIMutableUserNotificationAction alloc] init];
action2.identifier = @"action2";
action2.title=@"策略1行为2";
action2.activationMode = UIUserNotificationActivationModeBackground;
action2.authenticationRequired = NO;
action2.destructive = NO;
action2.behavior = UIUserNotificationActionBehaviorTextInput;//点击按钮文字输入,是否弹出键盘
*/
UNNotificationCategory *category1 = [UNNotificationCategory categoryWithIdentifier:@
"Category1"
actions:@[action2,action1] minimalActions:@[action2,action1] intentIdentifiers:@[@
"action1"
,@
"action2"
] options:UNNotificationCategoryOptionCustomDismissAction];
// UIMutableUserNotificationCategory * category1 = [[UIMutableUserNotificationCategory alloc] init];
// category1.identifier = @"Category1";
// [category1 setActions:@[action2,action1] forContext:(UIUserNotificationActionContextDefault)];
UNNotificationAction *action3 = [UNNotificationAction actionWithIdentifier:@
"action3"
title:@
"策略2行为1"
options:UNNotificationActionOptionForeground];
// UIMutableUserNotificationAction * action3 = [[UIMutableUserNotificationAction alloc] init];
// action3.identifier = @"action3";
// action3.title=@"策略2行为1";
// action3.activationMode = UIUserNotificationActivationModeForeground;
// action3.destructive = YES;
UNNotificationAction *action4 = [UNNotificationAction actionWithIdentifier:@
"action4"
title:@
"策略2行为2"
options:UNNotificationActionOptionForeground];
// UIMutableUserNotificationAction * action4 = [[UIMutableUserNotificationAction alloc] init];
// action4.identifier = @"action4";
// action4.title=@"策略2行为2";
// action4.activationMode = UIUserNotificationActivationModeBackground;
// action4.authenticationRequired = NO;
// action4.destructive = NO;
UNNotificationCategory *category2 = [UNNotificationCategory categoryWithIdentifier:@
"Category2"
actions:@[action3,action4] minimalActions:@[action3,action4] intentIdentifiers:@[@
"action3"
,@
"action4"
] options:UNNotificationCategoryOptionCustomDismissAction];
// UIMutableUserNotificationCategory * category2 = [[UIMutableUserNotificationCategory alloc] init];
// category2.identifier = @"Category2";
// [category2 setActions:@[action4,action3] forContext:(UIUserNotificationActionContextDefault)];
[[UNUserNotificationCenter currentNotificationCenter] setNotificationCategories:[
NSSet
setWithObjects:category1,category2,
nil
]];
[[UNUserNotificationCenter currentNotificationCenter] requestAuthorizationWithOptions:UNAuthorizationOptionBadge | UNAuthorizationOptionSound | UNAuthorizationOptionAlert completionHandler:^(
BOOL
granted,
NSError
* _Nullable error) {
NSLog
(@
"completionHandler"
);
}];
/*iOS9实现方法
UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:(UIUserNotificationTypeAlert|UIUserNotificationTypeBadge|UIUserNotificationTypeSound) categories:[NSSet setWithObjects: category1,category2, nil]];
[[UIApplication sharedApplication] registerUserNotificationSettings:settings];
*/
[[UIApplication sharedApplication] registerForRemoteNotifications];
[UNUserNotificationCenter currentNotificationCenter].delegate =
self
;
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
|
#pragma mark -
- (
void
)application:(UIApplication *)application didRegisterUserNotificationSettings:(UIUserNotificationSettings *)notificationSettings
NS_AVAILABLE_IOS
(8_0) __TVOS_PROHIBITED{
NSLog
(@
"didRegisterUserNotificationSettings"
);
}
- (
void
)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(
NSData
*)deviceToken
NS_AVAILABLE_IOS
(3_0){
NSLog
(@
"deviceToken:%@"
,deviceToken);
NSString
*deviceTokenSt = [[[[deviceToken description]
stringByReplacingOccurrencesOfString:@
"<"
withString:@
""
]
stringByReplacingOccurrencesOfString:@
">"
withString:@
""
]
stringByReplacingOccurrencesOfString:@
" "
withString:@
""
];
NSLog
(@
"deviceTokenSt:%@"
,deviceTokenSt);
}
- (
void
)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(
NSError
*)error
NS_AVAILABLE_IOS
(3_0){
NSLog
(@
"didFailToRegisterForRemoteNotificationsWithError:%@"
,error);
}
/*iOS9使用方法
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo NS_DEPRECATED_IOS(3_0, 10_0, "Use UserNotifications Framework's -[UNUserNotificationCenterDelegate willPresentNotification:withCompletionHandler:] or -[UNUserNotificationCenterDelegate didReceiveNotificationResponse:withCompletionHandler:] for user visible notifications and -[UIApplicationDelegate application:didReceiveRemoteNotification:fetchCompletionHandler:] for silent remote notifications"){
}
*/
- (
void
)userNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification withCompletionHandler:(
void
(^)(UNNotificationPresentationOptions))completionHandler{
NSLog
(@
"willPresentNotification:%@"
,notification.request.content.title);
// 这里真实需要处理交互的地方
// 获取通知所带的数据
NSString
*notMess = [notification.request.content.userInfo objectForKey:@
"aps"
];
}
- (
void
)userNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(
void
(^)())completionHandler{
//在没有启动本App时,收到服务器推送消息,下拉消息会有快捷回复的按钮,点击按钮后调用的方法,根据identifier来判断点击的哪个按钮
NSString
*notMess = [response.notification.request.content.userInfo objectForKey:@
"aps"
];
NSLog
(@
"didReceiveNotificationResponse:%@"
,response.notification.request.content.title);
// response.notification.request.identifier
}
//远程推送APP在前台
- (
void
)application:(UIApplication *)application didReceiveRemoteNotification:(
NSDictionary
*)userInfo fetchCompletionHandler:(
void
(^)(UIBackgroundFetchResult))completionHandler{
NSLog
(@
"didReceiveRemoteNotification:%@"
,userInfo);
}
|
转:http://www.cocoachina.com/bbs/read.php?tid=1686948