IOS
推送消息是许多
IOS
应用都具备的功能,之前我们已经做了
IOS
推送消息的准备工作
--
搭建
APNS
环境
,到这里证书已经准备完毕,
在应用服务器采用php
的方式将消息推送给APNS
:
<?php
// 这里是我们上面ios工程连接苹果服务器服务器返回的一个deviceToken,直接复制过来(记得去掉空格)
$deviceToken = '2cca7dff6e086e876c128ee5a60521527b2cc2fed923cb708335ca8ee2b7027b';
// 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
就会接收到一条推送消息了,如果有问题的话就检查上面的操作步骤,
注意:进行APNS
推送沙盒消息测试的地址的devictoken
和发布正式appstore
的devicetoken
是不同的,由于苹果服务器接收推送消息一次只可以接收7000
字节,每次发送消息又必须少于256
字节,所以我们对于多用户推送消息必须解决这一难题,则采用分批发送。
//进行IOS 推送信息
$rs = DBHelper :: db_likeQuery("devicetokens", array ());
//读取数据库数据统计总条数
if(pg_num_rows($rs)){
//30一组,可以分成几组
if(pg_num_rows($rs)%30){
$device_count = pg_num_rows($rs)/30 + 1;
}else{
$device_count = pg_num_rows($rs)/30;
}
$device_count = (int)$device_count;
}
ob_end_clean();
echo str_pad('', 2048);// 设置足够大,受output_buffering影响
for($i = 0; $i < $device_count; $i ++){
$passphrase = 'anhuioss-avene';
$pem_path = 'pro_ck.pem';
//$sslclient = 'ssl://gateway.sandbox.push.apple.com:2195';
//这个是沙盒测试地址,发布到appstore后记得修改哦
$sslclient = 'ssl://gateway.push.apple.com:2195';
//正式发布appstore后的地址
$fp = connectAPSN($sslclient,$pem_path,$passphrase);
//PUSH内容設定
$message = “IOS push推送消息测试!”;
//PUSH内容をJSON化
$size = 0;
$array = array();
$j = $i * 30;
//进行分批发送,每30人为一组
$link = DBHelper::db_pageQueryByTimeasc('devicetokens',$array, $j, 30,'id');
if(pg_num_rows($link)){
$devi = pg_fetch_all($link);
foreach ($devi as $key => $value) {
//$body['aps'] = array('alert' => $message,'sound' => 'default','badge'=> 1,);
//$payload = json_encode($body);
//由于转换json格式字节码转换一个汉字占4个字节,所以选择了直接使用json格式的数据类型,这样的话减少字节的转换,
$payload = '{"aps":{"alert":"'.$message.'","sound":"default","badge":"1"}}';
$json_size = strlen($payload);
$msg = chr(0) . pack('n', 32) . pack('H*', trim($value['token'])) . pack('n', $json_size) . $payload;
$msg_size = strlen($msg);
$result = fwrite($fp, $msg, $msg_size);
if (!$result){
echo 'Message not delivered' . PHP_EOL . '<br>';
fclose($fp);
sleep(1);
$fp = connectAPSN($sslclient,$pem_path,$passphrase);
$msg = chr(0) . pack('n', 32) . pack('H*', trim($value['token'])) . pack('n', $json_size) . $payload;
$msg_size = strlen($msg);
$result = fwrite($fp, $msg, $msg_size);
}else{
echo 'Message successfully delivered' . PHP_EOL .'<br>';
}
fclose($fp);
sleep(1);
}
echo 30+$j."人发送成功!<br><br>";
fclose($fp);
sleep(10);
}else{
}
}
function connectAPSN($sslclient,$pem_path,$passphrase){
$ctx = stream_context_create();
stream_context_set_option($ctx, 'ssl', 'local_cert', $pem_path);
stream_context_set_option($ctx, 'ssl', 'passphrase', $passphrase);
$fp = stream_socket_client($sslclient, $err, $errstr, 60, STREAM_CLIENT_CONNECT, $ctx);
if (!$fp){
echo "Failed to connect: $err.$errstr" . PHP_EOL . "<br>";
sleep(1);
$fp = connectAPSN($sslclient,$pem_path,$passphrase);
return $fp;
}else{
echo "AConnected to APNS" . PHP_EOL . "<br>";
return $fp;
}
}
IOS push测试效果图
- 大小: 996 KB
分享到:
相关推荐
iOS 推送消息技术详解 iOS 推送消息是许多 iOS 应用都具备的功能,它允许开发者向用户推送消息,提高用户体验和应用的粘性。本文将详细介绍 iOS 推送消息的工作机制、证书生成过程和工程代码实现。 一、iOS 推送...
本文将深入探讨“ios消息推送源码”,包括PHP服务端的实现,适用于那些正在使用Xcode 6.1进行APNs(Apple Push Notification service)开发的开发者。 首先,APNs是苹果公司提供的一个服务,它允许应用开发者向已...
用php实现ios推送效果的服务器端,简单快捷的实现推送
iOS推送服务器,也就是Apple Push Notification service (APNs),是苹果公司提供的一个服务,用于向运行iOS、iPadOS以及macOS操作系统的设备发送远程通知。下面我们将详细探讨iOS推送服务器的工作原理、实现流程及...
苹果的Push Notification Service (APNS) 是iOS设备接收推送通知的基础,而PHP作为后端服务器语言,可以通过与APNS交互来发送推送通知。开发者通常需要创建证书,配置服务器,并编写PHP脚本来生成并发送推送令牌。 ...
### IOS推送消息详解 在移动应用开发领域,**iOS推送消息**是一项关键功能,它能够增强用户参与度,提供即时信息更新,对于提升用户体验至关重要。本文将深入探讨iOS推送消息的工作原理、实施步骤以及必要的证书...
在iOS应用开发中,消息推送是一项重要的功能,它允许服务器向设备发送通知,即使应用程序在后台运行或完全关闭。这个“ios 消息推送 java后端demo”是为开发者提供的一个示例,帮助理解如何使用Java后端实现对iOS...
3. **连接到APNs服务器**:使用像`apns.class.php`这样的库(例如PHP的ApnsPHP),可以建立SSL连接到APNs服务器,并发送构建好的推送消息。 4. **处理反馈**:APNs会提供一个反馈服务,用于告知开发者哪些设备Token...
本程序为测试ios推送消息程序。 生成推送证书后,添加到本程序根目录下,并配置JdSoft.Apns.Test.exe.config文件,就可以向指定设备推送消息。 可一作为验证证书是否生成正确。 ///证书名称 ...
PHP代码发送IOS推送消息 PUSH IOS NOTIFICATION
Java向苹果服务器推送消息是iOS应用开发者经常遇到的需求,用于实时通知用户新的信息或系统状态。APNs(Apple Push Notification service)是苹果公司提供的推送服务,允许开发者将消息推送到用户的iOS设备上。本...
在iOS设备上,为了实现实时的消息推送服务,Apple提供了名为Apple Push Notification Service (APNS) 的服务。本文将深入探讨如何使用ASP.NET技术来构建iOS推送服务器端代码。 首先,理解APNS的工作原理至关重要。...
在iOS应用开发中,推送通知是一项至关重要的功能,它允许应用程序在用户不直接与应用交互时向用户发送消息。"ios推送工具.zip"是一个专为iOS开发者设计的工具,尤其适用于Mac用户,它简化了推送通知的测试过程,无需...
友盟推送服务是一款针对移动应用开发者提供的消息推送解决方案,它涵盖了Android和iOS两大主流操作系统,旨在帮助开发者提高用户活跃度、提升应用留存率以及进行精准的用户行为分析。在这个服务中,开发者可以向用户...
在IT行业中,推送服务是移动应用开发者不可或缺的一部分,特别是对于iOS平台,由于其封闭的生态系统,需要使用特定的苹果推送通知服务(Apple Push Notification service,简称APNs)来实现消息推送。本文将详细讲解...
在iOS应用开发中,为了实现实时的消息推送功能,通常会使用Apple Push Notification Service (APNS)。在Java服务端实现iOS消息推送涉及到以下几个关键步骤和技术: 1. **应用程序注册消息推送**: 当用户首次启动iOS...
在iOS应用开发中,服务器推送是一项关键功能,它能让应用在后台状态下接收到来自服务器的通知,从而提升用户体验。本文将深入探讨iOS服务器推送的关键要点,包括Apple Push Notification Service(APNs)、推送通知...
.alertBody("这是来自服务器的推送消息") .build() .build(); ``` 5. **发送推送**: - 使用创建的ApnsService实例,调用`push`方法发送通知到设备。 ```java service.push(deviceToken, notification); ``` ...
在iOS应用程序开发中,推送通知是一项至关重要的功能,它允许应用在后台向用户的设备发送消息,即使用户没有直接与应用交互也能接收信息。PushMeBaby通过模拟推送服务,帮助开发者快速验证推送通知的配置和工作流程...