찾다
php教程php手册IOS 推送消息 php做推送服务端

http://zxs19861202.iteye.com/blog/1532460 IOS推送消息是许多IOS应用都具备的功能,最近也在研究这个功能,参考了很多资料终于搞定了,下面就把步骤拿出来分享下: iOS消息推送的工作机制可以简单的用下图来概括: Provider是指某个iPhone软件的Push服务器

http://zxs19861202.iteye.com/blog/1532460


IOS推送消息是许多IOS应用都具备的功能,最近也在研究这个功能,参考了很多资料终于搞定了,下面就把步骤拿出来分享下:

 

 

 

iOS消息推送的工作机制可以简单的用下图来概括:


IOS 推送消息 php做推送服务端

 

Provider是指某个iPhone软件的Push服务器,APNS是Apple Push Notification Service的缩写,是苹果的服务器。

 

上图可以分为三个阶段:

第一阶段:应用程序把要发送的消息、目的iPhone的标识打包,发给APNS。 

第二阶段:APNS在自身的已注册Push服务的iPhone列表中,查找有相应标识的iPhone,并把消息发送到iPhone。 

第三阶段:iPhone把发来的消息传递给相应的应用程序,并且按照设定弹出Push通知。

IOS 推送消息 php做推送服务端

 

从上图我们可以看到:

1、应用程序注册消息推送。

2、iOS从APNS Server获取device token,应用程序接收device token。

3、应用程序将device token发送给PUSH服务端程序。

4、服务端程序向APNS服务发送消息。

5、APNS服务将消息发送给iPhone应用程序。

 

无论是iPhone客户端和APNS,还是Provider和APNS,都需要通过证书进行连接。

 

下面我介绍一下几种用到的证书。

 

一、CSR文件

 

1、生成Certificate Signing Request(CSR)


IOS 推送消息 php做推送服务端

 

2、填写你的邮箱和常用名称,并选择保存到硬盘。


IOS 推送消息 php做推送服务端

 

点击继续:


IOS 推送消息 php做推送服务端

 

这样就在本地生成了一个Push.certSigningRequest文件。

 

二、p12文件

 

1、导出密钥。


IOS 推送消息 php做推送服务端


IOS 推送消息 php做推送服务端

 

2、输入你的密码。

 

IOS 推送消息 php做推送服务端

 

这样就生成了一个Push.p12文件。

 

三、SSL certificate文件

 

1、用你付过费的帐号登录到iOS Provisioning Portal,并新建一个App ID,这个过程可以参考:iOS应用的真机调试,这样就会生成下面这条记录:


IOS 推送消息 php做推送服务端

 

2、点击右侧的Configure:


IOS 推送消息 php做推送服务端

 

3、点击Development Push SSL Certificate一行后的Configure:

 

IOS 推送消息 php做推送服务端

 

4、点击Continue:


IOS 推送消息 php做推送服务端

 

5、选择前面生成好的Push.certSigningRequest文件,点击Generate,出现如下所示的页面:


IOS 推送消息 php做推送服务端

 

6、点击Continue:


IOS 推送消息 php做推送服务端

 

 

7、点击Download,并将文件命名为aps_developer_identity.cer。

 

8、点击Done,你会发现状态变成了Enabled:


IOS 推送消息 php做推送服务端

 

 

到现在为止,我们已经生成了三个文件:

1、Push.certSigningRequest

2、Push.p12

3、aps_developer_identity.cer

 

双击aps_developer_dientity.cer 注册到你的钥匙串中,这样你的钥匙串中就会有


IOS 推送消息 php做推送服务端

二、准备profile证书,因为推送消息只能再真机上测试,所以要建一个profile证书


IOS 推送消息 php做推送服务端
点击"new profile"为上面新建的APP ID建个profile ,成功之后下载*_Dev_Profile.mobileprovision

双击将其加入到xcode 的Provisioning Profiles 中,这里有一点要注意,再将这个加入xcode之前如果之前已经加入过一定要把之前加入的删掉,如果有多个的话会出错。

 

三、工程代码

到这里证书已经准备完毕,接下来,我们在xcode中新建一个测试工程,注意设置工程的Bundle Identifier必须与上面建的APP ID 里的相同


IOS 推送消息 php做推送服务端

在didFinishLaunchingWithOptions 中加入一下代码

 

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

{

 

[self.window makeKeyAndVisible];

    [[UIApplication sharedApplicationregisterForRemoteNotificationTypesUIRemoteNotificationTypeBadge |UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert];

    return YES;

 

}

 

 

- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)pToken {


    NSLog(@"regisger success:%@", pToken);

    

    //注册成功,deviceToken保存到应用服务器数据库中

    

}


 

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo{

    // 处理推送消息

    UIAlertView *alert=[[UIAlertView alloc]initWithTitle:@"通知" message:@"我的信息" delegate:selfcancelButtonTitle:@"取消" otherButtonTitles:nilnil];

    [alert show];

    [alert release];

NSLog(@"%@", userInfo);

}


- (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error {

    NSLog(@"Regist fail%@",error); 

    

  

}

 

到这里一切顺利的话我们就可以在真机运行了,注册成功我们会得到iphone 的deviceToken,

 

My token is:

 

四、在应用服务器采用php的方式将消息推送给APNS,

1、php连接APNS也是需要证书的,还记得我们上面获得的几个证书吗?打开终端,对上面的证书做如下处理,

cd  进入证书所在目录

 

把.cer文件转换成.pem文件:

$ openssl x509 -in aps_developer_identity.cer -inform der

-out PushChatCert.pem

把私钥Push.p12文件转换成.pem文件:

$ openssl pkcs12 -nocerts -out PushChatKey.pem -in Push.p12

Enter Import Password:

MAC verified OK

Enter PEM pass phrase:

Verifying – Enter PEM pass phrase:

你首先需要为.p12文件输入passphrase密码短语,这样OpenSSL可以读它。然后你需要键入一个新的密码短语来加密PEM文件。还是使用”pushchat”来作为PEM的密码短语。你需要选择一些更安全的密码短语。

注意:如果你没有键入一个PEM passphrase,OpenSSL将不会返回一个错误信息,但是产生的.pem文件里面将不会含有私钥。

最后。把私钥和证书整合到一个.pem文件里:

$ cat PushChatCert.pem PushChatKey.pem > ck.pem

为了测试证书是否工作,执行下面的命令

$ telnet gateway.sandbox.push.apple.com 2195

Trying 17.172.232.226…

Connected to gateway.sandbox.push-apple.com.akadns.net.

Escape character is ‘^]’.

它将尝试发送一个规则的,不加密的连接到APNS服务。如果你看到上面的反馈,那说明你的MAC能够到达APNS。按下Ctrl+C 关闭连接。如果得到一个错误信息,那么你需要确保你的防火墙允许2195端口。

然后再次连接,这次用我们的SSL证书和私钥来设置一个安全的连接:

$ openssl s_client -connect gateway.sandbox.push.apple.com:2195

-cert PushChatCert.pem -key PushChatKey.pem

Enter pass phrase for PushChatKey.pem:

你会看到一个完整的输出,让你明白OpenSSL在后台做什么。如果连接是成功的,你可以键入一些字符。当你按下回车后,服务就会断开连接。如果在建立连接时有问题,OpenSSL将会给你一个错误消息,

ck.pem文件就是我们需要得到php连接APNS 的文件,将ck.pem和push.php放入同一目录上传到服务器,push.php的代码如下:

 


// 这里是我们上面得到的deviceToken,直接复制过来(记得去掉空格

$deviceToken = '740f4707bebcf74f 9b7c25d4 8e3358945f6aa01da5ddb387462c7eaf 61bb78ad';


// Put your private key's passphrase here:

$passphrase = 'abc123456';


// Put your alert message here:

$message = 'My first push test!';


////////////////////////////////////////////////////////////////////////////////


$ctx = stream_context_create();

stream_context_set_option($ctx, 'ssl''local_cert''ck.pem');

stream_context_set_option($ctx, 'ssl''passphrase', $passphrase);


// Open a connection to the APNS server

//这个为正是的发布地址

 //$fp = stream_socket_client(“ssl://gateway.push.apple.com:2195“, $err, $errstr, 60, //STREAM_CLIENT_CONNECT, $ctx);

//这个是沙盒测试地址,发布到appstore后记得修改哦

$fp = stream_socket_client(

'ssl://gateway.sandbox.push.apple.com:2195', $err,

$errstr, 60, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $ctx);


if (!$fp)

exit("Failed to connect: $err $errstr" . PHP_EOL);


echo 'Connected to APNS' . PHP_EOL;


// Create the payload body

$body['aps'] = array(

'alert' => $message,

'sound' => 'default'

);


// Encode the payload as JSON

$payload = json_encode($body);


// Build the binary notification

$msg = chr(0. pack('n'32. pack('H*', $deviceToken) . pack('n', strlen($payload)) . $payload;


// Send it to the server

$result = fwrite($fp, $msg, strlen($msg));


if (!$result)

echo 'Message not delivered' . PHP_EOL;

else

echo 'Message successfully delivered' . PHP_EOL;


// Close the connection to the server

fclose($fp);

?>


接下来我们访问http://localhost/push/push.php


iphone就会接收到一条推送消息了,如果有问题的话就检查上面的操作步骤,特别是加红的部分

 

另外去除标记的方法为,在viewDidApper中加入

int badge = [UIApplication sharedApplication].applicationIconBadgeNumber;

    if(badge > 0)

    {

        badge--;

        [UIApplication sharedApplication].applicationIconBadgeNumber = badge;

    }

 

 

 

给一个参考地址:http://article.ityran.com/archives/194


성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
如何在 iPhone 上更改数字格式如何在 iPhone 上更改数字格式Apr 13, 2023 pm 06:16 PM

您可以在 iOS 16 上选择哪些数字格式随着对 iOS 16.4 (beta 2) 的更改,您可以为您的 iPhone 选择三种不同的数字格式。这些格式使用空格、逗号和句点作为分隔数字中千位的符号或作为小数点。小数点是用于将值的整数部分与其小数部分分开的字符,通常由句点 (.) 或逗号 (,) 分配。千位分隔符用于将多位数的数字分成三组,通常由句点 (.)、逗号 (,) 或空格 ( ) 指定。 在最新版本的 iOS 上,您将能够应用以下任何一种数字格式作为您 iPhone 的首选选项:1,23

如何在 iPhone 上的 Always-on Display 上关闭墙纸和通知如何在 iPhone 上的 Always-on Display 上关闭墙纸和通知Apr 16, 2023 pm 11:07 PM

iOS16是Apple移动设备的重大更新,因为它不仅引入了新功能,还为iPhone14Pro和ProMax带来了独家功能。这些新款iPhone是Apple首款配备常亮显示屏的iPhone。苹果对AOD的看法略有不同,不是整个屏幕变黑,而是显示变暗,刷新率动态降低到1Hz。不用说,这并不适合世界各地的许多用户和评论者,因为大多数人会不经意地检查他们的手机,并假设这是一条通知而不是AOD。Apple似乎已经在最新版本的iOS16中认识到并纠正了这个问题,增加

Chrome 未安装在 iPad 上:3 种轻松修复它的方法Chrome 未安装在 iPad 上:3 种轻松修复它的方法Apr 14, 2023 pm 03:13 PM

浏览互联网已成为我们大多数人的第二天性,我们目前生活在一个时代,它已成为我们所做的几乎所有事情的代名词。它不仅是我们用来购物,或与亲朋好友相聚的地方,它也成为了一种宝贵的工作用具。自从COVID-19大流行开始,混合工作成为新常态以来,浏览器和通信软件已成为我们与同事之间的新纽带。而且,在我们所有流行的浏览器选择中,绝大多数用户决定使用谷歌的Chrome。现在,您不一定需要运行Microsoft支持的操作系统才能使用Chrome,因为该软件也可以在其他软件上正常运行。话虽这么说,如果您尝试在

如何在 iOS 15 中阻止电话号码如何在 iOS 15 中阻止电话号码Apr 13, 2023 am 11:37 AM

虽然不需要的电话是日常生活的一部分,但您的 iPhone 提供了一些不同的选项来使特别顽固的来电者静音。这是在iOS 15上阻止或静音不需要的电话的方法。屏蔽电话号码可以为您减轻很多压力。一旦被阻止,您将不会收到来自被阻止号码的任何呼叫的提醒。此外,呼叫者将被允许留下语音邮件,但您不会收到已留下语音邮件的通知。打开电话应用滚动到您要阻止的号码点击号码旁边的信息图标向下滚动并点按阻止此来电者点击阻止联系人您也可以在FaceTime应用程序中按照相同的步骤来阻止持续的 FaceTime 呼叫者。被屏

适用于 iOS 的微软待办通过滚动改进等进行了更新适用于 iOS 的微软待办通过滚动改进等进行了更新Apr 14, 2023 am 09:37 AM

微软待办已收到 iOS 更新,将版本升级至 2.75,并添加了一些值得注意的更改。最新版本的任务管理应用程序提供更流畅的体验。这是因为微软在最新版本的应用程序中引入了滚动改进。除此之外,最新版本还可能带有错误修复和改进。您可以在下面阅读完整的官方变更日志。微软待办 2.75 版几个月前,微软更新了它的 To Do iOS 应用程序,让用户更容易为他们的任务添加注释。它旨在为您的

iOS 16 中的 Apple Wallet 让你离抛弃你的钱包更近了一步iOS 16 中的 Apple Wallet 让你离抛弃你的钱包更近了一步Apr 14, 2023 am 08:22 AM

iOS 16 已经准备好再次推动你放弃实体钱包。对 iOS 16 所做的更改包括一些仅限于美国地区的功能,但苹果也愿意将其部分功能开放给其他平台。首先,马里兰州和亚利桑那州现在支持 Apple 的数字身份验证服务 Wallet ID。除了这两个,Apple 还表示很快还会有另外 11 个,但没有任何关于哪些州的进一步信息。钱包 ID 也可以在 Uber 等应用中使用,并且不必分享您的具体信息。例如,它可以说您已超过 21 岁,但不提供您的实际年龄。Apple Wallet 中的数字密钥也可以通过

ios是linux系统吗ios是linux系统吗Nov 19, 2021 pm 03:14 PM

ios不是linux,ios实际上是Darwin的ARM变体,源自BSD,类UNIX内核以及Apple自己的Mach内核扩展系统;这与Linux是完全不同的,Linux是一个单片内核,所有驱动程序代码和I/O工具包都是核心内核的一部分。

iOS 16.2 引入“自定义辅助功能模式”,为 iPhone 和 iPad 提供简化的体验iOS 16.2 引入“自定义辅助功能模式”,为 iPhone 和 iPad 提供简化的体验Apr 13, 2023 am 11:07 AM

苹果公司周二向开发人员发布了iOS 16.2 beta 2,因为该公司准备在 12 月向公众提供更新。正式地,它添加了新的 Freeform 协作应用程序和对 Home 应用程序的改进。在后台,9to5Mac发现 Apple 一直在开发一种新的“自定义辅助功能模式”,该模式将为 iPhone 和 iPad 提供“流线型”体验。自定义辅助功能模式这种代号为“Clarity”的新模式基本上用更精简的模式取代了 Springboard(这是 iOS 的主要界面)。该功能在当前测试版中仍对用户不可用,将

See all articles

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

뜨거운 도구

Dreamweaver Mac版

Dreamweaver Mac版

시각적 웹 개발 도구

안전한 시험 브라우저

안전한 시험 브라우저

안전한 시험 브라우저는 온라인 시험을 안전하게 치르기 위한 보안 브라우저 환경입니다. 이 소프트웨어는 모든 컴퓨터를 안전한 워크스테이션으로 바꿔줍니다. 이는 모든 유틸리티에 대한 액세스를 제어하고 학생들이 승인되지 않은 리소스를 사용하는 것을 방지합니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

Eclipse용 SAP NetWeaver 서버 어댑터

Eclipse용 SAP NetWeaver 서버 어댑터

Eclipse를 SAP NetWeaver 애플리케이션 서버와 통합합니다.

SublimeText3 영어 버전

SublimeText3 영어 버전

권장 사항: Win 버전, 코드 프롬프트 지원!