重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
在 PHP 的实作上透过 stream_context_create() 函式建立 SSL 连线,再利用 pack() 函式实作上述的规格来传送 Bytes 资料 (Payload),以下是 PHP 最精简的发送讯息程式码,执行後可以顺利与 APNS 沟通与发送讯息。各位可以依据需求修改程式来发送 Enhanced 或 Simple 讯息,或者切换 Sandbox 或 Production 环境。程式范例如下:
创新互联联系电话:18982081108,为您提供成都网站建设网页设计及定制高端网站建设服务,创新互联网页制作领域十多年,包括成都岗亭等多个行业拥有丰富的网站营销经验,选择创新互联,为网站锦上添花!
?php
// Production mode
$certificateFile = 'apns-dis.pem';
$pushServer = 'ssl://gateway.push.apple.com:2195';
$feedbackServer = 'ssl://feedback.push.apple.com:2196';
// Sandbox mode
$certificateFile = 'apns-dev.pem';
$pushServer = 'ssl://gateway.sandbox.push.apple.com:2195';
$feedbackServer = 'ssl://feedback.sandbox.push.apple.com:2196';
// push notification
$streamContext = stream_context_create();
stream_context_set_option($streamContext, 'ssl', 'local_cert', $certificateFile);
$fp = stream_socket_client(
$pushServer,
$error,
$errorStr,
100,
STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT,
$streamContext
);
// make payload
$payloadObject = array(
'aps' = array(
'alert' = 'Server Time:'.date('Y-m-d H:i:s'),
'sound' = 'default',
'badge' = 3
),
'custom_key' = 'custom_value'
);
$payload = json_encode($payloadObject);
$deviceToken = 'aa3b045415034b96da5e98f57e35735a8ed8b842506f770ee769de32c6305ed7';
$expire = time() + 3600;
$id = time();
if ($expire) {
// Enhanced mode
$binary = pack('CNNnH*n', 1, $id, $expire, 32, $deviceToken, strlen($payload)).$payload;
} else {
// Simple mode
$binary = pack('CnH*n', 0, 32, $deviceToken, strlen($payload)).$payload;
}
$result = fwrite($fp, $binary);
fclose($fp);
?
这个先说原理!就是PHP返回一个URL给IOS端。然后IOS端接收并下载缓存显示!OK
第一种情况:程序未启动(也不在后台)。点击通知栏里的消息会触发以下方法
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions
可在这个方法里处理通知,代码如下:
NSDictionary* pushNotification = [launchOptionsobjectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];
如果用户点击桌面app的图标打开程序,只会触发这个方法
- (void)applicationDidBecomeActive:(UIApplication *)application
这时候是没办法得到推送的通知的。
第二种情况:程序运行中(包括在后台),点击通知栏里的通知,会触发以下方法
-(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary*)userInfo{
可在这个方法做相应的处理。
信息量太少,收不到消息的原因,我随口能说出来一百种可能,你有没有参与调试?
push消息连接是否畅通?别的数据是否可以正常还是专有数据无法接收?
是否网络不畅造成的?等等,需要技术人员去调试才能得到更进一步的解决方法
你这问题问成个表面原因了,这是该用户提出来的原因,而非出自技术人员之口。
请问你的客户端是将数据流编码了之后传递的么?
客户端可以直接使用流上传,不需要进行编码,然后php获取后直接保存就可以了,如:
$byte = file_get_contents('php://input');
file_put_contents($filename,$byte);
这样客户端不用进行处理,直接向服务器端写入数据流就可以了。
php实现ios推送的方法:首先把要发送的消息以及iPhone标识打包,并发送给APNS;然后查找有相应标识的iPhone,并把消息发送到iPhone;最后把发来的消息传递给相应的应用程序,并且按照设定弹出Push通知即可。
可以分为三个阶段:
第一阶段:应用程序把要发送的消息、目的iPhone的标识打包,发给APNS。
第二阶段:APNS在自身的已注册Push服务的iPhone列表中,查找有相应标识的iPhone,并把消息发送到iPhone。
第三阶段:iPhone把发来的消息传递给相应的应用程序,并且按照设定弹出Push通知。
推送服务极光还不错,极光多种消息类型,开发者可以轻松地通过极光发送各个移动平台的系统通知,还可以在控制台编辑多种富文本展示模板; 极光还提供自定义消息的透传,客户端接到消息内容后根据自己的逻辑自由处理。