1

我已成功使用 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 的库添加的 __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;  
        }
    }
}
4

1 回答 1

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'));
于 2013-05-19T04:09:44.327 回答