IOS开发之----远程推送通知

2024-09-02 16:32
文章标签 开发 推送 ios 远程 通知

本文主要是介绍IOS开发之----远程推送通知,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

原文地址:IOS开发之----远程推送通知 作者:倒計時

玩了一年的iPhone了各种App的远程通知接收了不少,每次接收到的时候,就在反思,这丫的怎么实现的! 

由于工作方面一直没有接触的机会,所以只好自己主动去做做练习试试了.

实践后发现,一系列的配置非常繁琐,当然咯,网上的教程已经一大堆了.

在这里还是写一篇文章来记录一些自己容易忘记的细节,以备日后所需时能够有用武之地.


依照自己的习惯,喜欢把参考过的教程列举出来,真的很感谢这些网上的牛人.

1: ios本地通知和远程通知

http://wangjun.easymorse.com/?p=1482

2: 苹果远程通知服务申请激活例图 (外国佬写的.)

http://mobiforge.com/developing/story/programming-apple-push-notification-services

3:书籍参考:iPhone 开发秘籍 第16章 推送通知.


好了,进入正文:

首先是申请证书的网址

https://developer.apple.com/ios/manage/overview/index.action

登录成功以后,进入iOS 配置管理的 主页面.

[转载]IOS开发之----远程推送通知

第一步操作是去创建一个新的App IDs创建成功后,会需要提供安全证书来激动推送服务,如下图:


[转载]IOS开发之----远程推送通知



[转载]IOS开发之----远程推送通知

[转载]IOS开发之----远程推送通知

 

选择存储到磁盘以后,生成一个文件名称为(简称CSR): CertificateSigningRequest.certSigningRequest

回到Apple页面 将这个提交并提示激动成功.

激活成功后的App  IDs 提供下载开发版或是发布版的主动推送证书(aps_development.cer),如果需要做服务器方面的主动推送的话,就必须要下载这个文件来使用推送服务了.

第二步要为App提供接受推送许可的证书,点击Provisioning进行设置,添加一个新的许可,选择刚刚新创建的App IDs. 再选择可以调试的iPhone 设备.

最后,同样是下载下来: YsyPushMessageDemo.mobileprovision双击该证书,让其加载一次.

接下来,进入iOS工程,选择使用该证书来调试.


[转载]IOS开发之----远程推送通知

 

红圈中,全部设置刚刚加载的许可证书.


那么到这里,关于证书类的准备工作,已经全部准备就绪.

在这里再此强调一次,每个文件的具体作用

1: CertificateSigningRequest.certSigningRequest : 为生成App IDs 而用

2: aps_development.cer 为开发主动推送服务而用到的证书

3: YsyPushMessageDemo.mobileprovision 为App 接受推送通知的许可服务


主动推送的Push 代码及使用,请参考一开始介绍的第一篇博客

这里只附上下载地址: https://github.com/stefanhafeneger/PushMeBaby


接下来,说说收到推送通知代码方面.

1:申请本App需要接受来自服务商提供推送消息,

 


  1. [[UIApplication sharedApplication] registerForRemoteNotificationTypes:(UIRemoteNotificationTypeBadge UIRemoteNotificationTypeSound UIRemoteNotificationTypeAlert)];  

2:申请发出后,如果成功,委托会自动返回一个设备令牌(toKen),如果失败,将会进入另外一个失败的委托

 

 


  1. //远程通知注册成功委托  
  2. (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken  
  3.  
  4.     NSLog(@"%@",deviceToken);  
  5.     self.viewController.toKenValueTextView.text [NSString stringWithFormat:@"%@",deviceToken];  
  6.     self.viewController.pushStatusLabel.text @"已经注册." 
  7.  
  8. //远程通知注册失败委托  
  9. -(void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error  
  10.  
  11.     self.viewController.toKenValueTextView.text [error description];  
  12.  

3:将设备令牌码提供给服务商,以供推送到具体的手机上面. 如果远程推送消息来了,用户点击了推送消息,或者应用已经处于打开状态,系统都会自动调用以下委托:

 

 


  1. //点击某条远程通知时调用的委托 如果界面处于打开状态,那么此委托会直接响应  
  2. -(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo  
  3.  
  4.     NSLog(@"远程通知");  
  5.     [self PMD_uesPushMessage:userInfo];  
  6.  

4: 第三点里面的介绍的情况是应用程序已经处于运行状态,上面的委托才会被执行,如果应用程序处于未启用状态,此时又需要响应消息,那么需要以下委托处理.

 

 


  1. (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions  
  2.  
  3.     //这里处理应用程序如果没有启动,但是是通过通知消息打开的,此时可以获取到消息.  
  4.     if (launchOptions != nil)  
  5.         NSDictionary *userInfo [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];  
  6.         [self PMD_uesPushMessage:userInfo];  
  7.      
  8.     return YES;  
  9.  

5:清空通知中心已有的推送消息,只需要将指定App 的 Badge 设置为 0即可

 


  1. [[UIApplication sharedApplication setApplicationIconBadgeNumber:0];  

 

6:主动推送的字符串必须符合如下Json数组的格式,才能正确推送到手机当中.

 

 

    @"{

       //自定义参数

       "userinfo":

              {

                 "name":"remote notice"

              },

       //标准写法

       "aps":

              {

                 "alert":

                           {

                              "action-loc-key":"Open",//支持多语言

                              "body":"messgae content"//消息正文

                           },

                 "badge":1,//为App 的icon  标记 具体数值

                 "sound":"default" //播放的音频文件,default 表示系统默认的选择列铃声

             

     }";



到这里就差不多结束了.


php服务器推送消息


 

  1. <?php  
  2.   
  3. $deviceToken '38c866dd bb323b39 ffa73487 5e157ee5 a85e0b7ce90d56e9 fe145bcc 6c2c594b'// masked for security reason  
  4. // Passphrase for the private key (ck.pem file)  
  5. // $pass '';  
  6. // Get the parameters from http get or from command line  
  7. $message $_GET['message'or $message $argv[1] or $message 'Message received from javacom' 
  8. $badge (int)$_GET['badge'or $badge (int)$argv[2];  
  9. $sound $_GET['sound'or $sound $argv[3];  
  10. // Construct the notification payload  
  11. $body array();  
  12. $body['aps'array('alert' => $message);  
  13. if ($badge 
  14. $body['aps']['badge'$badge 
  15. if ($sound 
  16. $body['aps']['sound'$sound 
  17.   
  18.   
  19. $ctx stream_context_create();  
  20. stream_context_set_option($ctx'ssl''local_cert''ck.pem');  
  21. // assume the private key passphase was removed.  
  22. // stream_context_set_option($ctx, 'ssl', 'passphrase', $pass);  
  23. $fp stream_socket_client('ssl://gateway.sandbox.push.apple.com:2195'$err$errstr60, STREAM_CLIENT_CONNECT, $ctx);  
  24. if (!$fp 
  25. print "Failed to connect $err $errstrn" 
  26. return 
  27.  
  28. else  
  29. print "Connection OKn" 
  30.  
  31. $payload json_encode($body);  
  32. $msg chr(0) pack("n",32) pack('H*'str_replace('''$deviceToken)) pack("n",strlen($payload)) $payload 
  33. print "sending message :" $payload "n" 
  34. fwrite($fp$msg);  
  35. fclose($fp);  
  36. ?>

 这个帖子写的也不错

http://blog.csdn.net/bl1988530/article/details/6729369

 

代码例子下载:

http://ishare.iask.sina.com.cn/f/33789601.html

这篇关于IOS开发之----远程推送通知的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1130476

相关文章

SpringBoot 多环境开发实战(从配置、管理与控制)

《SpringBoot多环境开发实战(从配置、管理与控制)》本文详解SpringBoot多环境配置,涵盖单文件YAML、多文件模式、MavenProfile分组及激活策略,通过优先级控制灵活切换环境... 目录一、多环境开发基础(单文件 YAML 版)(一)配置原理与优势(二)实操示例二、多环境开发多文件版

使用docker搭建嵌入式Linux开发环境

《使用docker搭建嵌入式Linux开发环境》本文主要介绍了使用docker搭建嵌入式Linux开发环境,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 目录1、前言2、安装docker3、编写容器管理脚本4、创建容器1、前言在日常开发全志、rk等不同

Java实现远程执行Shell指令

《Java实现远程执行Shell指令》文章介绍使用JSch在SpringBoot项目中实现远程Shell操作,涵盖环境配置、依赖引入及工具类编写,详解分号和双与号执行多指令的区别... 目录软硬件环境说明编写执行Shell指令的工具类总结jsch(Java Secure Channel)是SSH2的一个纯J

Python实战之SEO优化自动化工具开发指南

《Python实战之SEO优化自动化工具开发指南》在数字化营销时代,搜索引擎优化(SEO)已成为网站获取流量的重要手段,本文将带您使用Python开发一套完整的SEO自动化工具,需要的可以了解下... 目录前言项目概述技术栈选择核心模块实现1. 关键词研究模块2. 网站技术seo检测模块3. 内容优化分析模

Mac电脑如何通过 IntelliJ IDEA 远程连接 MySQL

《Mac电脑如何通过IntelliJIDEA远程连接MySQL》本文详解Mac通过IntelliJIDEA远程连接MySQL的步骤,本文通过图文并茂的形式给大家介绍的非常详细,感兴趣的朋友跟... 目录MAC电脑通过 IntelliJ IDEA 远程连接 mysql 的详细教程一、前缀条件确认二、打开 ID

基于Java开发一个极简版敏感词检测工具

《基于Java开发一个极简版敏感词检测工具》这篇文章主要为大家详细介绍了如何基于Java开发一个极简版敏感词检测工具,文中的示例代码简洁易懂,感兴趣的小伙伴可以跟随小编一起学习一下... 目录你是否还在为敏感词检测头疼一、极简版Java敏感词检测工具的3大核心优势1.1 优势1:DFA算法驱动,效率提升10

Python开发简易网络服务器的示例详解(新手入门)

《Python开发简易网络服务器的示例详解(新手入门)》网络服务器是互联网基础设施的核心组件,它本质上是一个持续运行的程序,负责监听特定端口,本文将使用Python开发一个简单的网络服务器,感兴趣的小... 目录网络服务器基础概念python内置服务器模块1. HTTP服务器模块2. Socket服务器模块

Java 与 LibreOffice 集成开发指南(环境搭建及代码示例)

《Java与LibreOffice集成开发指南(环境搭建及代码示例)》本文介绍Java与LibreOffice的集成方法,涵盖环境配置、API调用、文档转换、UNO桥接及REST接口等技术,提供... 目录1. 引言2. 环境搭建2.1 安装 LibreOffice2.2 配置 Java 开发环境2.3 配

Python38个游戏开发库整理汇总

《Python38个游戏开发库整理汇总》文章介绍了多种Python游戏开发库,涵盖2D/3D游戏开发、多人游戏框架及视觉小说引擎,适合不同需求的开发者入门,强调跨平台支持与易用性,并鼓励读者交流反馈以... 目录PyGameCocos2dPySoyPyOgrepygletPanda3DBlenderFife

使用Python开发一个Ditto剪贴板数据导出工具

《使用Python开发一个Ditto剪贴板数据导出工具》在日常工作中,我们经常需要处理大量的剪贴板数据,下面将介绍如何使用Python的wxPython库开发一个图形化工具,实现从Ditto数据库中读... 目录前言运行结果项目需求分析技术选型核心功能实现1. Ditto数据库结构分析2. 数据库自动定位3