iOS10全新推送功能实现代码

2025-05-29 0 20

从ios8.0开始推送功能的实现在不断改变,功能也在不断增加,ios10又出来了一个推送插件的开发(见最后图),废话不多说直接上代码:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21
#import <usernotifications/usernotifications.h>

- (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下还是跟以前一样在此获取

}

[self registernotification];

return yes;

}

注册推送方法的改变:

新增库 #import <usernotifications/usernotifications.h> 推送单列unusernotificationcenter 等api

?

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

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87
#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);

}

/*

- (void)application:(uiapplication *)application handleactionwithidentifier:(nullable nsstring *)identifier forremotenotification:(nsdictionary *)userinfo completionhandler:(void(^)())completionhandler ns_deprecated_ios(8_0, 10_0, "use usernotifications framework's -[unusernotificationcenterdelegate didreceivenotificationresponse:withcompletionhandler:]") __tvos_prohibited

{

}

*/

/*

// 本地通知回调函数,当应用程序在前台时调用

- (void)application:(uiapplication *)application didreceivelocalnotification:(uilocalnotification *)notification ns_deprecated_ios(4_0, 10_0, "use usernotifications framework's -[unusernotificationcenterdelegate willpresentnotification:withcompletionhandler:] or -[unusernotificationcenterdelegate didreceivenotificationresponse:withcompletionhandler:]") __tvos_prohibited{

nslog(@"didreceivelocalnotification:%@",notification.userinfo);

// 这里真实需要处理交互的地方

// 获取通知所带的数据

nsstring *notmess = [notification.userinfo objectforkey:@"aps"];

uialertview *alert = [[uialertview alloc] initwithtitle:@"本地通知(前台)"

message:notmess

delegate:nil

cancelbuttontitle:@"ok"

otherbuttontitles:nil];

[alert show];

// 更新显示的徽章个数

nsinteger badge = [uiapplication sharedapplication].applicationiconbadgenumber;

badge--;

badge = badge >= 0 ? badge : 0;

[uiapplication sharedapplication].applicationiconbadgenumber = badge;

// 在不需要再推送时,可以取消推送

[firstviewcontroller cancellocalnotificationwithkey:@"key"];

}

- (void)application:(uiapplication *)application handleactionwithidentifier:(nullable nsstring *)identifier forlocalnotification:(uilocalnotification *)notification completionhandler:(void(^)())completionhandler ns_deprecated_ios(8_0, 10_0, "use usernotifications framework's -[unusernotificationcenterdelegate didreceivenotificationresponse:withcompletionhandler:]") __tvos_prohibited

{

//在非本app界面时收到本地消息,下拉消息会有快捷回复的按钮,点击按钮后调用的方法,根据identifier来判断点击的哪个按钮,notification为消息内容

nslog(@"%@----%@",identifier,notification);

completionhandler();//处理完消息,最后一定要调用这个代码块

}

*/

还有推送插件开发: 类似ios tody widget插件开发

iOS10全新推送功能实现代码

iOS10全新推送功能实现代码

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持快网idc。

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

快网idc优惠网 建站教程 iOS10全新推送功能实现代码 https://www.kuaiidc.com/92471.html

相关文章

发表评论
暂无评论