欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

iOS消息远程推送通知

程序员文章站 2023-12-18 18:02:22
本文实例为大家分享了ios消息推送、ios远程通知代码,供大家参考,具体内容如下 消息推送 /* 要开发测试消息机制的程序,必须用真机测试 推送消...

本文实例为大家分享了ios消息推送、ios远程通知代码,供大家参考,具体内容如下

消息推送

/*
 要开发测试消息机制的程序,必须用真机测试
 
 推送消息的类型
 uiremotenotificationtypenone  不接收推送消息
 uiremotenotificationtypebadge  接收图标数字
 uiremotenotificationtypesound  接收音频
 uiremotenotificationtypealert  接收消息文字
 uiremotenotificationtypenewsstandcontentavailability 接收订阅消息
 
 要想监听到注册的devicetoken需要在苹果的开发者中心,进行一些设置工作才可以。
 */

- (bool)application:(uiapplication *)application didfinishlaunchingwithoptions:(nsdictionary *)launchoptions
{
  // 设置应用程序能够接收apns推送的消息
  [application registerforremotenotificationtypes:uiremotenotificationtypealert | uiremotenotificationtypebadge | uiremotenotificationtypesound];
  
  self.window = [[uiwindow alloc] initwithframe:[[uiscreen mainscreen] bounds]];
  self.window.backgroundcolor = [uicolor whitecolor];
  [self.window makekeyandvisible];
  
  return yes;
}

#pragma mark - 获取devicetoken
- (void)application:(uiapplication *)application didregisterforremotenotificationswithdevicetoken:(nsdata *)devicetoken
{
  nslog(@"%@", devicetoken);
  // 1. 从系统偏好取之前的token
  nsdata *oldtoken = [[nsuserdefaults standarduserdefaults]objectforkey:@"devicetoken"];
  // 2. 新旧token进行比较
  if (![oldtoken isequaltodata:devicetoken]) {
    // 3. 如果不一致,保存token到系统偏好
    [[nsuserdefaults standarduserdefaults]setobject:devicetoken forkey:@"devicetoken"];
    
    // 4. 使用post请求传输新旧token至服务器
    // 1) url
    // 具体的url地址以及post请求中的参数和格式,是由公司的后端程序员提供的
    // 2) request post body(包含新旧token的数据)
    // 3) connection 的异步
  }
}

远程通知

/**
 远程消息推送必须在真机上运行!
 */
- (bool)application:(uiapplication *)application didfinishlaunchingwithoptions:(nsdictionary *)launchoptions
{
  // 需要告诉苹果的服务器,当前应用程序需要接收远程通知
  [application registerforremotenotificationtypes:uiremotenotificationtypealert | uiremotenotificationtypebadge | uiremotenotificationtypesound];
  
  return yes;
}

#pragma mark - 获取到设备的代号(令牌)
// 接收到苹果返回的设备代号
- (void)application:(uiapplication *)application didregisterforremotenotificationswithdevicetoken:(nsdata *)devicetoken
{
  // 第一次运行获取到devicetoken时间会比较长!
  nslog(@"%@", devicetoken);
  
  // 将devicetoken转换成字符串,以便后续使用
  nsstring *token = [devicetoken description];
  nslog(@"description %@", token);
  
  // =======================================================
  // 如果devicetoken发生变化,需要通知服务器
  // 每次都记录住从服务器获取到得devicetoken
  // 再次获取时进行比对
  // 从偏好设置取出当前保存的token
  nsstring *oldtoken = [[nsuserdefaults standarduserdefaults] objectforkey:@"devicetoken"];
  
  // 当token发生变化时,提交给服务器保存新的token
//  if (![oldtoken isequaltostring:token]) {
//    
//    // 将devicetoken通过post请求,提交给自己的服务器即可!
//    // 发送post请求
//    nsurl *url = [nsurl urlwithstring:@"公司后台服务器的网址"];
//    nsmutableurlrequest *request = [nsmutableurlrequest requestwithurl:url cachepolicy:nsurlrequestuseprotocolcachepolicy timeoutinterval:10.f];
//    
//    request.httpmethod = @"post";
//    request.httpbody = @"转换后的设备id以及其他信息[之前的token]";
//    
//    // sql: update t_devicetable set token = newtoken where token = oldtoken;
//    
//    // 同步:必须执行完才能继续
//    // 异步:直接交给其他线程工作,不干扰主线程工作,用户也感觉不到延迟
//    [nsurlconnection sendasynchronousrequest:request queue:[nsoperationqueue mainqueue] completionhandler:^(nsurlresponse *response, nsdata *data, nserror *connectionerror) {
//      // 偷偷的将用户信息传送到公司的服务器
//    }];
//  }
  
  // 将token保存至系统偏好
  [[nsuserdefaults standarduserdefaults] setobject:token forkey:@"devicetoken"];
}

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

上一篇:

下一篇: