我已成功使用APNS-PHP发送PN - 非常棒!
但是,我对如何将其添加到Code Igniter项目有点困惑 (在将从命令行调用的控制器内)。
致电:
require_once APPPATH.'/third_party/ApnsPHP/Autoload.php';
导致错误:
Fatal error: Uncaught exception 'Exception' with message 'Class file
'XXXXXXX/application/third_party/CI/DB/mysql/result.php' does not
exists' in XXXXXXX/application/third_party/ApnsPHP/Autoload.php:49
我认为这是某种自动加载冲突?但我不是 非常肯定!
任何帮助都会很棒 - 我没有太多运气就拖着谷歌!
这是我试图在函数中使用的行:
require_once APPPATH.'/third_party/ApnsPHP/Autoload.php';
这是我为加载Ion Auth的libs添加的__autoload函数:
function __autoload($class)
{
if (strpos($class, 'CI_') !== 0)
{
if (file_exists($file = APPPATH.'core/'.$class.EXT))
{
include $file;
}
else if (file_exists($file = APPPATH.'libraries/'.$class.EXT))
{
include $file;
}
else if (file_exists($file = APPPATH.'core/base_controllers/'.$class.EXT))
{
include $file;
}
}
}
答案 0 :(得分:6)
如果没有对库进行其他更改,这对我有用。它稍微回避了CI,但仍然允许你加载APNS-PHP作为模型:
<?php
if(!defined('BASEPATH')) exit('No direct script access allowed');
class Notification_model extends CI_Model {
protected $apnsDir = '';
// -----------------------------------------------
/**
* Setup some basic stuffs
* @param void
* @return void
* @access public
*/
public function __construct() {
parent::__construct();
/* get all the APNS files */
$this->apnsDir = $_SERVER['DOCUMENT_ROOT'].'/application/third_party/ApnsPHP/';
$this->_apns_req();
return;
} /* /__construct() */
// -----------------------------------------------
/**
* Will send the actual iOS notification to the user
* @param $token string iOS device token
* @param $msg string
* @param $attrs array Key/value pairs to be sent as meta with APN
* @return void
* @access public
*/
private function send_ios($token=null, $msg=null, $attrs=array()) {
if(!$token || !$msg) return;
// Instantiate a new ApnsPHP_Push object
$push = new ApnsPHP_Push(
ApnsPHP_Abstract::ENVIRONMENT_SANDBOX,
$this->apnsDir.'SSL/server_certificates_bundle_sandbox.pem'
);
// Set the Provider Certificate passphrase
// $push->setProviderCertificatePassphrase('tablecan29');
// Set the Root Certificate Autority to verify the Apple remote peer
$push->setRootCertificationAuthority($this->apnsDir.'SSL/entrust_root_certification_authority.pem');
// Connect to the Apple Push Notification Service
$push->connect();
// Instantiate a new Message with a single recipient
$message = new ApnsPHP_Message($token);
// Set a custom identifier. To get back this identifier use the getCustomIdentifier() method
// over a ApnsPHP_Message object retrieved with the getErrors() message.
$message->setCustomIdentifier("Message-Badge-3");
// Set badge icon to "3"
// $message->setBadge(0);
// Set a simple welcome text
$message->setText($msg);
// Play the default sound
$message->setSound();
// Set custom properties
if( is_array($attrs) && count($attrs) )
{
foreach( $attrs as $attr_key => $attr_val )
{
$message->setCustomProperty($attr_key, $attr_val);
}
}
// Set the expiry value - in seconds
$message->setExpiry(120);
// Add the message to the message queue
$push->add($message);
// Send all messages in the message queue
$push->send();
// Disconnect from the Apple Push Notification Service
$push->disconnect();
// Examine the error message container
// $aErrorQueue = $push->getErrors();
// if (!empty($aErrorQueue)) {
// var_dump($aErrorQueue);
// }
return TRUE;
} /* /send_ios() */
// -----------------------------------------------
private function _apns_req() {
require_once $this->apnsDir.'Abstract.php';
require_once $this->apnsDir.'Exception.php';
require_once $this->apnsDir.'Feedback.php';
require_once $this->apnsDir.'Message.php';
require_once $this->apnsDir.'Log/Interface.php';
require_once $this->apnsDir.'Log/Embedded.php';
require_once $this->apnsDir.'Message/Custom.php';
require_once $this->apnsDir.'Message/Exception.php';
require_once $this->apnsDir.'Push.php';
require_once $this->apnsDir.'Push/Exception.php';
require_once $this->apnsDir.'Push/Server.php';
require_once $this->apnsDir.'Push/Server/Exception.php';
return;
} /* /_apns_req() */
} /* /Notification_model{} */
/* End of file notification_model.php */
/* Location: ./application/models/notification_model.php */
使用示例:
$this->load->model('notification_model');
$this->notification_model->send_ios($token, 'Test Message', array('custom_var' => 'val'));