热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

发送多个iPhone推送通知+APNS+PHP

发送多个iPhone推送通

这是我终于做到的方式


  1. 下载的apns-php

  2. PHP代码

    set_time_limit(0);
    $root_path = "add your root path here";
    require_once($root_path."webroot\cron\library\config.php");
    require_once($root_path."Vendor\ApnsPHP\Autoload.php");
    global $obj_basic;
    // Basic settings
    $timezOne= new DateTimeZone('America/New_York');
    $date = new DateTime();
    $date->setTimezone($timezone);
    $time = $date->format('H:i:s');
    //Get notifications data to send push notifications
    $queueQuery = " SELECT `notifications`.*, `messages`.`mes_message`, `messages`.`user_id`, `messages`.`mes_originated_from` FROM `notifications`
    INNER JOIN `messages`
    ON `notifications`.`message_id` = `messages`.`mes_id`
    WHERE `notifications`.`created` <= NOW()";
    $queueData = $obj_basic->get_query_data($queueQuery);
    if(!empty($queueData)) {
    // Put your private key's passphrase here:
    $passphrase = 'Push';
    $ctx = stream_context_create();
    stream_context_set_option($ctx, 'ssl', 'local_cert', 'server_certificates_bundle_sandbox.pem');
    stream_context_set_option($ctx, 'ssl', 'passphrase', $passphrase);
    // Open a connection to the APNS server
    $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 '
    '.date("Y-m-d H:i:s").' Connected to APNS' . PHP_EOL;
    foreach($queueData as $val) {
    // Put your device token here (without spaces):
    $devicetoken = $val['device_token'];
    // Create message
    // Get senders name
    $sql = "SELECT `name` FROM `users` WHERE id =".$val['user_id'];
    $name = $obj_basic->get_query_data($sql);
    $name = $name[0]['name'];
    $message = $name." : ";
    // Get total unread messaged for receiver
    $query = "SELECT COUNT(*) as count FROM `messages` WHERE mes_parent = 0 AND user_id = ".$val['user_id']." AND mes_readstatus_doc != 0 AND mes_status = 1";
    $totalUnread = $obj_basic->get_query_data($query);
    $totalUnread = $totalUnread[0]['count'];
    $message .= " This is a test message.";
    // Create the payload body
    $body['aps'] = array(
    'alert' => $message,
    'badge' => $totalUnread,
    '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 '
    '.date("Y-m-d H:i:s").' Message not delivered' . PHP_EOL;
    } else {
    $sqlDelete = "DELETE FROM `notifications` WHERE id = ".$val['id'];
    $query_delete = $obj_basic->run_query($sqlDelete,'DELETE');
    echo '
    '.date("Y-m-d H:i:s").' Message successfully delivered' . PHP_EOL;
    }
    }
    // Close the connection to the server
    fclose($fp);
    echo '
    '.date("Y-m-d H:i:s").' Connection closed to APNS' . PHP_EOL;
    } else {
    echo '
    '.date("Y-m-d H:i:s").' Queue is empty!';
    }






推荐阅读
  • Summarize function is doing alignment without timezone ?
    Hi.Imtryingtogetsummarizefrom00:00otfirstdayofthismonthametric, ... [详细]
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • IhaveconfiguredanactionforaremotenotificationwhenitarrivestomyiOsapp.Iwanttwodiff ... [详细]
  • web.py开发web 第八章 Formalchemy 服务端验证方法
    本文介绍了在web.py开发中使用Formalchemy进行服务端表单数据验证的方法。以User表单为例,详细说明了对各字段的验证要求,包括必填、长度限制、唯一性等。同时介绍了如何自定义验证方法来实现验证唯一性和两个密码是否相等的功能。该文提供了相关代码示例。 ... [详细]
  • Spring常用注解(绝对经典),全靠这份Java知识点PDF大全
    本文介绍了Spring常用注解和注入bean的注解,包括@Bean、@Autowired、@Inject等,同时提供了一个Java知识点PDF大全的资源链接。其中详细介绍了ColorFactoryBean的使用,以及@Autowired和@Inject的区别和用法。此外,还提到了@Required属性的配置和使用。 ... [详细]
  • 本文记录了在vue cli 3.x中移除console的一些采坑经验,通过使用uglifyjs-webpack-plugin插件,在vue.config.js中进行相关配置,包括设置minimizer、UglifyJsPlugin和compress等参数,最终成功移除了console。同时,还包括了一些可能出现的报错情况和解决方法。 ... [详细]
  • 本文介绍了在序列化时如何对SnakeYaml应用格式化,包括通过设置类和DumpSettings来实现定制输出的方法。作者提供了一个示例,展示了期望的yaml生成格式,并解释了如何使用SnakeYaml的特定设置器来实现这个目标。对于正在使用SnakeYaml进行序列化的开发者来说,本文提供了一些有用的参考和指导。摘要长度为169字。 ... [详细]
  • 本文介绍了Sencha Touch的学习使用心得,主要包括搭建项目框架的过程。作者强调了使用MVC模式的重要性,并提供了一个干净的引用示例。文章还介绍了Index.html页面的作用,以及如何通过链接样式表来改变全局风格。 ... [详细]
  • 本文详细介绍了使用C#实现Word模版打印的方案。包括添加COM引用、新建Word操作类、开启Word进程、加载模版文件等步骤。通过该方案可以实现C#对Word文档的打印功能。 ... [详细]
  • 本文由编程笔记#小编为大家整理,主要介绍了markdown[软件代理设置]相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 1.webkit内核中的一些私有的meta标签,这些meta标签在开发webapp时起到非常重要的作用(1) ... [详细]
  • 在windows7中安装sqlserver2005中碰到的问题1.iis检测失败的解决办法控制面板-》程序和功能-》打开或关闭windows功能-》打开IISFeatures,点左 ... [详细]
  • 一、设置时区方法一:使用setup工具setup选择Timezoneconfiguration选择AsiaShanghai空格键勾选上System ... [详细]
  • javascript  – 概述在Firefox上无法正常工作
    我试图提出一些自定义大纲,以达到一些Web可访问性建议.但我不能用Firefox制作.这就是它在Chrome上的外观:而那个图标实际上是一个锚点.在Firefox上,它只概述了整个 ... [详细]
  • 安卓select模态框样式改变_微软Office风格的多端(Web、安卓、iOS)组件库——Fabric UI...
    介绍FabricUI是微软开源的一套Office风格的多端组件库,共有三套针对性的组件,分别适用于web、android以及iOS,Fab ... [详细]
author-avatar
帅哥刘常胜
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有