• ios如何实现远程推送消息


     远程推送可以解决 当用户关闭程序的时候 不能收到推送消息。当客户端使用了远程推送的功能,不管用户有没有关闭程序,都能收到 服务器推送的消息。

     苹果实现远程推送 是基于长连接的, 默认情况下 苹果的所有设备都是和 苹果的apns服务器建立长连接的, 只要设备已经联网。

     长连接的好处: 苹果服务器可以主动向 客户端发送消息, 也可以找回我的设备(当设备丢失时)。

      远程推送的步骤: 客户端向苹果服务器获取deviceToken步骤:客户端将 BundleId 和 设备UDID 发送给苹果Apns服务器,苹果返回deviceToken给客户端作为唯一标识。 然后客户端将 deviceToken传送给我们公司的服务器。  当公司服务器需要向客户端推送消息时,公司服务器先将消息内容和deviceToken发送给苹果服务器,苹果服务器拿到消息 根据deviceToken找到设备手机,然后实现推送。

      调试远程推送的条件: 必须是真机

      推送证书的配置:1,如果是开发调试推送, 配置开发的cer证书aps_development.cer  和描述文件

               2, 如果是发布程序调试推送,配置aps_production.cer 和描述文件 。

      配置明确的appID,然后配置开发的推送证书和发布的推送证书。 最好都配置一下,然后需要生成描述文件。

      客户端代码:

          注册推送服务:

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

    - (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
    {
    // 将DeviceToken传给服务器
      NSLog(@"%@", deviceToken.description);
    }

    当用户点击弹出的推送消息,调用下面方法

    - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
    {
    NSLog(@"%@", userInfo);

    // 比如 可以添加一个红色的View
    }

    如果想要实现 不需用户点击弹出的推送框  就直接修改UI, 可以调用下面方法:(这个方法不常用,需要服务器发送固定的格式 来推送消息)

    - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler
    {
    NSLog(@"11111111");

    UIView *redView = [[UIView alloc] init];
    redView.backgroundColor = [UIColor redColor];
    redView.frame = CGRectMake(100, 100, 100, 100);
    [self.window.rootViewController.view addSubview:redView];

    但是 必须这样做,才能实现
    // 1.打开后台模式 2.告诉系统是否有新内容的更新 3.发送的通知有固定的格式("content-available":"1")
    completionHandler(UIBackgroundFetchResultNewData);
    }

      

  • 相关阅读:
    系统分析师思维导图
    系统分析师案例分析知识点——虚拟内存篇
    系统分析师案例分析知识点——进程管理问题
    系统分析师案例分析知识点——进程同步问题
    200行代码实现RPC框架
    由vue3引起的一段值得记录经历
    PetaPoco在ASP.NET Core 2.2中使用注入方式访问数据库
    在.net core 中PetaPoco结合EntityFrameworkCore使用codefirst方法进行开发
    Quartz.NET的简单任务管理类
    System.Action的使用(lambda 表达式)
  • 原文地址:https://www.cnblogs.com/dashengios/p/5449538.html
Copyright © 2020-2023  润新知