iOS分享世界iOS 开发每天分享优质文章

推送通知

2019-01-24  本文已影响7人  Mg明明就是你

一、推送通知


iOS中提供了2种推送通知


推送通知的作用

推送通知的作用.png

推送通知的呈现效果总结


推送通知的呈现效果设置

推送通知的呈现效果设置.png

推送通知的使用细节




二、本地推送通知

2.1-如何发出本地推送通知

  • 设置本地推送通知属性

2.2-本地推送通知的其他属性

2.3-点击本地推送通知

2.4-iOS8.0的变化

UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeBadge 
                                                                                  | UIUserNotificationTypeSound
                                                                                  | UIUserNotificationTypeAlert categories:nil];

[application registerUserNotificationSettings:settings];



三、远程推送通知

3.1-什么是远程推送通知

3.2-远程推送通知使用须知

3.3-获得deviceToken的过程

获得deviceToken的过程.png
获得deviceToken的过程.png
从获得deviceToken 到 推送消息给设备 的过程.png
全过程详细图.png

3.3-开发iOS程序的推送功能

一. iOS端需要做的事
二.调试iOS的远程推送功能, 必备条件:
三.发布具有推送服务的app
四.注册远程推送通知
注册远程推送通知
// 一般在App启动完毕后就马上注册
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
     //注册远程通知
     UIRemoteNotificationType type = UIRemoteNotificationTypeAlert | 
UIRemoteNotificationTypeBadge | 
UIRemoteNotificationTypeSound;

 [application registerForRemoteNotificationTypes:type];

    return YES;
}
-(void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken (NSData *)deviceToken
{
    NSLog(@"%@", deviceToken);
}



四、证书配置

创建App ID.png
为App ID创建APNs SSL证书1.png
为App ID创建APNs SSL证书2.png
为App ID创建APNs SSL证书3.png
生成描述文件.png
安装.png


五、总结:远程推送通知步骤

1.创建支持远程推送功能的App ID
2.创建调试证书,并选中刚刚创建的App ID
3.下载CER文件,并导入钥匙串管理
4.创建发布证书,并选中刚刚创建的App ID
5.下载CER文件,并导入钥匙串管理
6.检查App ID,确认证书已经指定
7.生成描述文件

格式:{"aps":{"alert":"This is some fancy message.","badge":1,"sound":"default"}}

if(系统版本 >= 8.0)
{
    // 注册接收通知的类型
    UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeAlert | UIUserNotificationTypeBadge | UIUserNotificationTypeSound categories:nil];
    [application registerUserNotificationSettings:settings];

    // 注册允许接收远程推送通知
    [application registerForRemoteNotifications];
}
else
{
    // 如果是iOS7.0,使用以下方法注册
    [application registerForRemoteNotificationTypes:UIUserNotificationTypeAlert | UIUserNotificationTypeBadge | UIUserNotificationTypeSound];
}


// 当得到苹果的APNs服务器返回的DeviceToken就会被调用
// 7040f7d5 5a974598 c5cf31b5 3e340b39 68affd25 122f0ce1 3f315226 396c2e5b
- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
    NSLog(@"deviceToken是:%@", deviceToken);
}

// 接收到远程通知,触发方法和本地通知一致
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo {
    NSLog(@"%@", userInfo);
}

1- 在Capabilities中打开远程推送通知
2- 实现代理方法

远程消息数据格式: {"aps" : {"content-available" : 1},"content-id" : 42}

/***********
           *  当接收到远程通知时调用(iOS7.0之后使用)
           *
           *  当前在前台时; 或者app在后台\\app被彻底退出状态下,点击通知打开app进入前台; 都可以执行以下方法
           *
           *
           * 执行completionHandler 作用(有两个目的)
           *
           *      1> 系统会估量App消耗的电量,并根据传递的UIBackgroundFetchResult 参数记录新数据是否可用
           *      2> 调用完成的处理代码时,应用的界面缩略图会自动更新
           * 
           * 如果想要接收到通知后,不要用户点击通知, 就执行以下代码, 那么必须有三个要求:
                  1> 必须勾选后台模式Remote Notification ;
                  2> 告诉系统是否有新的内容更新(执行完成代码块)
                  3> 设置发送通知的格式("content-available":"随便传")
               注意:接收到远程通知到执行完网络请求之间的时间不能超过30秒
***********/
- (void)application:(UIApplication *)application 
didReceiveRemoteNotification:(NSDictionary *)userInfo 
fetchCompletionHandler:(void (^ (UIBackgroundFetchResult))completionHandler
{
  if (userInfo) {
      int contentId = [userInfo[@"content-id"] intValue];

      ViewController *vc = (ViewController *)application.keyWindow.rootViewController;
      [vc loadDataWithContentID:contentId completion:^(NSArray *dataList) {
          vc.dataList = dataList;

          NSLog(@"刷新数据结束");

          completionHandler(UIBackgroundFetchResultNewData);
      }];
  } else {
        completionHandler(UIBackgroundFetchResultNoData);
  }



六、其他推送

  1. 远程推送测试

     > PushMeBaby
         1. 编译会出现错误, 直接把错误行注释即可;
         2. 需要填写对应的deviceToken;      
         3. 需要将推送测试证书改名为aps.cer 拖入项目中;
    
  2. 第三方推送
    极光推送(JPush)
    个推
    信鸽

具体集成步骤以及使用方法, 请查看对应的官方文档, 非常详细;
第三方服务合集: http://mdsa.51cto.com/services/




如有不足之处,欢迎指出,谢谢

上一篇 下一篇

猜你喜欢

热点阅读