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 

ある種のオートロードの競合だと思いますか?しかし、よくわかりません!

どんな助けでも素晴らしいでしょう-私はあまり運がなくてもGoogleをトロールしました!

関数内で使用しようとしている行は次のとおりです。

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 に答える