ios消息推送 - Gen_0

本文章只提供学习!!

      iOS的消息推送(推送通知)有两种,一种是本地推送通知,另一种是远程推送通知。所谓本地推送通知就是使用代码推送消到用户设备中提醒用户一些信息,推送形式请查看手机设置。远程推送通知是通过服务器发送消息到用户设备中,iOS到消息推送要经过苹果的服务器来推送消息,过程比较麻烦。下面是个人学习笔记,只提供新手学习(当然我也是个新手),不能用于商业用途。

     所有的消息推送只在后台或者推出程序才有意义,程序在前台运行的时候是没有意义的,所有发送消息推送的时候请把程序退出或者挂在后台运行才能体现出效果。

     一、本地推送通知

以下代码为了更好看到本地推送通知地效果最好写在一个按钮事件中,点击发送通知。

// 1.创建本地推送通知

    UILocalNotification *localNotification = [[UILocalNotification alloc] init];

    // 2.设置一些属性

    // 通知发出的时间(5秒后)

    localNotification.fireDate = [NSDate dateWithTimeIntervalSinceNow:5];

    // 设置时区(跟随手机的时区)

    localNotification.timeZone = [NSTimeZone defaultTimeZone];

    // 音乐文件名

    localNotification.soundName = @"xxxxx.wav";

    // 通知的内容

    localNotification.alertBody = @"内容";

    // 锁屏界面显示的标题 如下面的写法将显示:滑动来查看内容   格式:"滑动来" + 标题

    localNotification.alertAction = @"查看内容"    

    // 设置app图标数字

    localNotification.applicationIconBadgeNumber = 10;

    // 设置通知的其他信息

    localNotification.userInfo = @{

                    @"title" : @"好消息",

                    };//可随意添加

    // 设置启动图片

    localNotification.alertLaunchImage = @"Default.png";

    // 设置重复发出通知的时间间隔

//    localNotification.repeatInterval = NSCalendarUnitMinute;

    // 3.发通知

    [[UIApplication sharedApplication] scheduleLocalNotification:localNotification];

//----------------------------------------------------------

点击发送通知后把程序退出或者挂到后台,等待5秒就会有通知,如果觉得5太长或太短请根据个人需要该上面到代码。

当用户点击通知进入app的时候或者程序运行在前台的时候会在appdelegate中调用下面这个方法

- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification

如果想当app在前台的时候不做任何事情可以在上面的方法里面最前面加上这句代码:

// 程序正处在前台运行,直接返回

    if (application.applicationState == UIApplicationStateActive) return;

也可以在

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions方法中判断是否是点击通知进入app,如下:

UILocalNotification *ln = launchOptions[UIApplicationLaunchOptionsLocalNotificationKey];

    if (ln) {

       //点击通知进入app

    } else {

        //点击app图标进入app

    }

 

二、远程推送通知

做远程推送一定要用真机,模拟器不可以。需要做苹果开发者中心配置一些证书,过程比较多,我就不文字描述来了,直接看图片演示过程。

1.首先在钥匙串中配置电脑签名文件

ios消息推送 - Gen_0_第1张图片

ios消息推送 - Gen_0_第2张图片

邮件地址一般写公司的就好,选择存储到磁盘,继续。

ios消息推送 - Gen_0_第3张图片

我就在桌面新建了个叫push到文件夹,点击存储。

2.需要一个AppIDs  

(如果在测试阶段已经有了就不需要了,到时候直接用那个就可以,注意:AppIDs一定要是完整的,不能是xxx.xxx.*  做消息推送一定要是完整的ID),没有就弄一个,过程跟弄测试这书一样。反正做远程消息推送一定要真机测试,在做真机测试的时候已经有AppIDs了,这个过程就不贴出来了,不会的同学可以先去查看怎么配置真机测试证书。

3.配置一个开发证书

ios消息推送 - Gen_0_第4张图片

点击加号

ios消息推送 - Gen_0_第5张图片

选择APNs 然后continue

ios消息推送 - Gen_0_第6张图片

选择自己应用的AppID   之后continue 继续continue

ios消息推送 - Gen_0_第7张图片

选择第一步的时候保存证桌面push文件夹中的电脑签名文件

ios消息推送 - Gen_0_第8张图片

最好我开发证书也保存到push文件夹中,方便管理。

4.接下来配置生产证书

ios消息推送 - Gen_0_第9张图片

点击production  点击加号

ios消息推送 - Gen_0_第10张图片

选择production中的APNs  接下来所有的步骤跟配置开发证书一模一样,就不一一贴过程来。

5.这步骤才是最重要的。

ios消息推送 - Gen_0_第11张图片

点击加号

ios消息推送 - Gen_0_第12张图片

点击continue

ios消息推送 - Gen_0_第13张图片

选择你应用的APP ID

ios消息推送 - Gen_0_第14张图片

选择配置测试的时候生成的这书(本文没说明怎么配置测试证书,不知道请先查看如何配置测试证书)

ios消息推送 - Gen_0_第15张图片

选择测试设备,全部选择都没关系

ios消息推送 - Gen_0_第16张图片

按意起个名字就好了点击generate  下载到push文件夹中。

6.安装所有到证书,可以直接拖到我到证书中

ios消息推送 - Gen_0_第17张图片

ios消息推送 - Gen_0_第18张图片

ios消息推送 - Gen_0_第19张图片

导出开发证书

ios消息推送 - Gen_0_第20张图片

起个名developmentPush,文件格式选择.p12

ios消息推送 - Gen_0_第21张图片

我这里输入abcd1234,你们随意记住就行,

接下来也把生产证书导出来,我把名字起为productionPush,密码设置和开发证书一样(只是为了不混淆,不一样也可以),过程一样,就不贴图片了。

到这里就要所有到准备工作做好了,接下来是测试。

测试远程推送时候我是使用极光推送,你们有什么好的开源都可以使用。地址:www.jpush.cn ,注册个用户登录。

ios消息推送 - Gen_0_第22张图片

登录上去点击创建应用

ios消息推送 - Gen_0_第23张图片

只要填写我选中都部分就可以了,开发证书就是developmentPush.p12文件,密码就是自己设置的密码。生产证书就是productionPush.p12文件。

创建好之后会得到一个appkey   记住有用到,没记住也没事再选择应用中点击你添加到应用也可以看到。

ios消息推送 - Gen_0_第24张图片

然后下载iOS  SDK 地址:www.jpush.cn/common/products#product-sdk

下载好之后把里面的lib文件夹添加到工程中

再在工程中创建plist文件

ios消息推送 - Gen_0_第25张图片名字一定要是PushConfig.plist

ios消息推送 - Gen_0_第26张图片

添加三个键值对,内容一定要一样,最后一个就是在极光推送创建应用的appkey

必要的框架

  • CFNetwork.framework
  • CoreFoundation.framework
  • CoreTelephony.framework
  • SystemConfiguration.framework
  • CoreGraphics.framework
  • Foundation.framework
  • UIKit.framework
  • Security.framework
  • libz.dylib

然后在工程中的appdelegate中添加以下代码:

#import "APService.h"

在- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions方法中添加以下代码:

// Required

#if __IPHONE_OS_VERSION_MAX_ALLOWED > __IPHONE_7_1

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

        //可以添加自定义categories

        [APService registerForRemoteNotificationTypes:(UIUserNotificationTypeBadge |

                                                       UIUserNotificationTypeSound |

                                                       UIUserNotificationTypeAlert)

                                           categories:nil];

    } else {

        //categories 必须为nil

        [APService registerForRemoteNotificationTypes:(UIRemoteNotificationTypeBadge |

                                                       UIRemoteNotificationTypeSound |

                                                       UIRemoteNotificationTypeAlert)

                                           categories:nil];

    }

#else

    //categories 必须为nil

    [APService registerForRemoteNotificationTypes:(UIRemoteNotificationTypeBadge |

                                                   UIRemoteNotificationTypeSound |

                                                   UIRemoteNotificationTypeAlert)

                                       categories:nil];

#endif

    // Required

    [APService setupWithOption:launchOptions];

//----------------------------------------------------

最后添加以下方法:

#pragma mark - 获取DeviceToken

- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {

    

    // Required

    [APService registerDeviceToken:deviceToken];

}

 

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo {

    

    // Required

    [APService handleRemoteNotification:userInfo];

}

 

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

  

    // IOS 7 Support Required

    [APService handleRemoteNotification:userInfo];

    completionHandler(UIBackgroundFetchResultNewData);

}

这样就大功告成了。

这么发送通知呢?再极光推送平台点击你创建的应用,点击推送,发送通知

ios消息推送 - Gen_0_第27张图片

好了,完成。如果从下载iOS SDK开始不懂的同学可以查看教程,地址:http://docs.jpush.io/guideline/ios_guide/

 

以上的文章只是我个人学习笔记,有什么错误的地方不要喷,请您提出来让我改正,写博文不易,请不要乱复制拷贝别人的心得为自己的东西,感谢大家。

 


本文链接: ios消息推送,转载请注明。

你可能感兴趣的:(ios,消息,gen_0)