`
AnhuiOSS技术分享
  • 浏览: 34985 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

IOS推送消息,PHP作为推送服务器进行分批推送

阅读更多

 

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 和发布正式appstoredevicetoken 是不同的,由于苹果服务器接收推送消息一次只可以接收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推送消息docx文档

    iOS 推送消息技术详解 iOS 推送消息是许多 iOS 应用都具备的功能,它允许开发者向用户推送消息,提高用户体验和应用的粘性。本文将详细介绍 iOS 推送消息的工作机制、证书生成过程和工程代码实现。 一、iOS 推送...

    ios消息推送源码(含php服务端源码)

    本文将深入探讨“ios消息推送源码”,包括PHP服务端的实现,适用于那些正在使用Xcode 6.1进行APNs(Apple Push Notification service)开发的开发者。 首先,APNs是苹果公司提供的一个服务,它允许应用开发者向已...

    ios推送php服务器端

    用php实现ios推送效果的服务器端,简单快捷的实现推送

    iOS推送服务器

    iOS推送服务器,也就是Apple Push Notification service (APNs),是苹果公司提供的一个服务,用于向运行iOS、iPadOS以及macOS操作系统的设备发送远程通知。下面我们将详细探讨iOS推送服务器的工作原理、实现流程及...

    U盟消息推送_phpios推送_php安卓推送_thinkphp推送

    苹果的Push Notification Service (APNS) 是iOS设备接收推送通知的基础,而PHP作为后端服务器语言,可以通过与APNS交互来发送推送通知。开发者通常需要创建证书,配置服务器,并编写PHP脚本来生成并发送推送令牌。 ...

    IOS推送消息

    ### IOS推送消息详解 在移动应用开发领域,**iOS推送消息**是一项关键功能,它能够增强用户参与度,提供即时信息更新,对于提升用户体验至关重要。本文将深入探讨iOS推送消息的工作原理、实施步骤以及必要的证书...

    ios 消息推送 java后端demo(包括jar包)

    在iOS应用开发中,消息推送是一项重要的功能,它允许服务器向设备发送通知,即使应用程序在后台运行或完全关闭。这个“ios 消息推送 java后端demo”是为开发者提供的一个示例,帮助理解如何使用Java后端实现对iOS...

    关于IOS_APNS推送消息(iphone端+服务端)

    3. **连接到APNs服务器**:使用像`apns.class.php`这样的库(例如PHP的ApnsPHP),可以建立SSL连接到APNs服务器,并发送构建好的推送消息。 4. **处理反馈**:APNs会提供一个反馈服务,用于告知开发者哪些设备Token...

    Java向苹果服务器推送消息(Java实现HTTP/2协议发送APNS)

    Java向苹果服务器推送消息是iOS应用开发者经常遇到的需求,用于实时通知用户新的信息或系统状态。APNs(Apple Push Notification service)是苹果公司提供的推送服务,允许开发者将消息推送到用户的iOS设备上。本...

    IOS消息推送

    本程序为测试ios推送消息程序。 生成推送证书后,添加到本程序根目录下,并配置JdSoft.Apns.Test.exe.config文件,就可以向指定设备推送消息。 可一作为验证证书是否生成正确。 ///证书名称 ...

    PHP代码发送IOS推送消息 PUSH IOS NOTIFICATION

    PHP代码发送IOS推送消息 PUSH IOS NOTIFICATION

    ASP.NET实现IOS推送服务器端代码

    在iOS设备上,为了实现实时的消息推送服务,Apple提供了名为Apple Push Notification Service (APNS) 的服务。本文将深入探讨如何使用ASP.NET技术来构建iOS推送服务器端代码。 首先,理解APNS的工作原理至关重要。...

    ios推送工具.zip

    在iOS应用开发中,推送通知是一项至关重要的功能,它允许应用程序在用户不直接与应用交互时向用户发送消息。"ios推送工具.zip"是一个专为iOS开发者设计的工具,尤其适用于Mac用户,它简化了推送通知的测试过程,无需...

    Thinkphp5实现给IOS推送消息

    在IT行业中,推送服务是移动应用开发者不可或缺的一部分,特别是对于iOS平台,由于其封闭的生态系统,需要使用特定的苹果推送通知服务(Apple Push Notification service,简称APNs)来实现消息推送。本文将详细讲解...

    ios推送java服务端

    在iOS应用开发中,为了实现实时的消息推送功能,通常会使用Apple Push Notification Service (APNS)。在Java服务端实现iOS消息推送涉及到以下几个关键步骤和技术: 1. **应用程序注册消息推送**: 当用户首次启动iOS...

    ios的服务器推送要点

    在iOS应用开发中,服务器推送是一项关键功能,它能让应用在后台状态下接收到来自服务器的通知,从而提升用户体验。本文将深入探讨iOS服务器推送的关键要点,包括Apple Push Notification Service(APNs)、推送通知...

    苹果ios推送java服务端耗码demo

    .alertBody("这是来自服务器的推送消息") .build() .build(); ``` 5. **发送推送**: - 使用创建的ApnsService实例,调用`push`方法发送通知到设备。 ```java service.push(deviceToken, notification); ``` ...

    PushMeBaby ios推送通知测试工具

    在iOS应用程序开发中,推送通知是一项至关重要的功能,它允许应用在后台向用户的设备发送消息,即使用户没有直接与应用交互也能接收信息。PushMeBaby通过模拟推送服务,帮助开发者快速验证推送通知的配置和工作流程...

    iOS 消息推送服务器(OS X工程源码)

    本项目“iOS 消息推送服务器(OS X工程源码)”提供了一个完整的解决方案,帮助开发者搭建自己的本地推送服务器,以实现对iOS设备的自定义消息推送。下面我们将详细讨论这个项目中的关键知识点。 首先,我们来看iOS...

Global site tag (gtag.js) - Google Analytics