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);
}

  

原文地址:https://www.cnblogs.com/dashengios/p/5449538.html