2012-05-03 16 views
1

我已经成功使用APNS-PHP发送PN - 这太棒了!如何在Code Igniter项目中包含APNS-PHP?

但是,我有点卡在如何将它添加到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'; 

这里的__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

你可以发布你写与LIB使用的代码?出于某种原因,这试图实例化CI数据库类。 –

+0

我已经在Ion Auth的其他地方添加了一个自动加载功能 - 似乎是那种冲突。 – Rich

回答

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')); 
+0

看起来像一个解决方案 - 我不认为我用该代码点燃器的项目了,但! :/ – Rich

+0

从哪里我得到这些第三方文件...给我那个链接 –