2016-11-20 6 views
0

Я работаю в проекте codeignitor. Из-за некоторых его требований (отправьте push-уведомление на мобильные устройства) мне пришлось использовать внешнюю библиотеку, которая, вероятно, написана на родном PHP. Когда я запускаю весь код после его настройки дает мне «функции Init не допускается.» это Быстродействие исходит из конструктора из Pushnotification.php файла. Мой кодФункция Codeignitor .Init не разрешена

PushNotification.php

<?php 
// Server file 

class PushNotifications { 


// (Android)API access key from Google API's Console. 
private static $API_ACCESS_KEY = ''; 


// (iOS) Private key's passphrase. 
private static $passphrase = ''; 


// (Windows Phone 8) The name of our push channel. 
    private static $channelName = ""; 

// Change the above three vriables as per your app. 

public function __construct() { 
    exit('Init function is not allowed'); 
} 

    // Sends Push notification for Android users 
public function android($data, $reg_id) { 
     $url = 'https://android.googleapis.com/gcm/send'; 
     $message = array(
      'title' => $data['mtitle'], 
      'message' => $data['mdesc'], 
      'subtitle' => '', 
      'tickerText' => '', 
      'msgcnt' => 1, 
      'vibrate' => 1 
     ); 

     $headers = array(
      'Authorization: key=' .self::$API_ACCESS_KEY, 
      'Content-Type: application/json' 
     ); 

     $fields = array(
      'registration_ids' => array($reg_id), 
      'data' => $message, 
     ); 

     return $this->useCurl($url, $headers, json_encode($fields)); 
    } 

// Sends Push's toast notification for Windows Phone 8 users 
public function WP($data, $uri) { 
    $delay = 2; 
    $msg = "<?xml version=\"1.0\" encoding=\"utf-8\"?>" . 
      "<wp:Notification xmlns:wp=\"WPNotification\">" . 
       "<wp:Toast>" . 
        "<wp:Text1>".htmlspecialchars($data['mtitle'])."</wp:Text1>" . 
        "<wp:Text2>".htmlspecialchars($data['mdesc'])."</wp:Text2>" . 
       "</wp:Toast>" . 
      "</wp:Notification>"; 

    $sendedheaders = array(
     'Content-Type: text/xml', 
     'Accept: application/*', 
     'X-WindowsPhone-Target: toast', 
     "X-NotificationClass: $delay" 
    ); 

    $response = $this->useCurl($uri, $sendedheaders, $msg); 

    $result = array(); 
    foreach(explode("\n", $response) as $line) { 
     $tab = explode(":", $line, 2); 
     if (count($tab) == 2) 
      $result[$tab[0]] = trim($tab[1]); 
    } 

    return $result; 
} 

    // Sends Push notification for iOS users 
public function iOS($data, $devicetoken) { 

    $deviceToken = $devicetoken; 

    $ctx = stream_context_create(); 
    // ck.pem is your certificate file 
    stream_context_set_option($ctx, 'ssl', 'local_cert', 'ck.pem'); 
    stream_context_set_option($ctx, 'ssl', 'passphrase', self::$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); 

    // Create the payload body 
    $body['aps'] = array(
     'alert' => array(
      'title' => $data['mtitle'], 
      'body' => $data['mdesc'], 
     ), 
     '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)); 

    // Close the connection to the server 
    fclose($fp); 

    if (!$result) 
     return 'Message not delivered' . PHP_EOL; 
    else 
     return 'Message successfully delivered' . PHP_EOL; 

} 

// Curl 
private function useCurl(&$model, $url, $headers, $fields = null) { 
     // Open connection 
     $ch = curl_init(); 
     if ($url) { 
      // Set the url, number of POST vars, POST data 
      curl_setopt($ch, CURLOPT_URL, $url); 
      curl_setopt($ch, CURLOPT_POST, true); 
      curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); 
      curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 

      // Disabling SSL Certificate support temporarly 
      curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 
      if ($fields) { 
       curl_setopt($ch, CURLOPT_POSTFIELDS, $fields); 
      } 

      // Execute post 
      $result = curl_exec($ch); 
      if ($result === FALSE) { 
       die('Curl failed: ' . curl_error($ch)); 
      } 

      // Close connection 
      curl_close($ch); 

      return $result; 
    } 
    } 

} 
?> 

TestNotification.php

public function Testnotification() 
{ 

    $this->load->library('PushNotifications'); 

    // Message payload 

    $msg_payload = array (
     'mtitle' => 'Test push notification title', 
     'mdesc' => 'Test push notification body', 
    ); 

    // For Android 
    $regId = 'APA91bHdOmMHiRo5jJRM1jvxmGqhComcpVFDqBcPfLVvaieHeFI9WVrwoDeVVD1nPZ82rV2DxcyVv-oMMl5CJPhVXnLrzKiacR99eQ_irrYogy7typHQDb5sg4NB8zn6rFpiBuikNuwDQzr-2abV6Gl_VWDZlJOf4w'; 


    // For iOS 
    $deviceToken = 'FE66489F304DC75B8D6E8200DFF8A456E8DAEACEC428B427E9518741C92C6660'; 


    // For WP8 
    $uri = 'http://s.notify.live.net/u/1/sin/HmQAAAD1XJMXfQ8SR0b580NcxIoD6G7hIYP9oHvjjpMC2etA7U_xy_xtSAh8tWx7Dul2AZlHqoYzsSQ8jQRQ-pQLAtKW/d2luZG93c3Bob25lZGVmYXVsdA/EKTs2gmt5BG_GB8lKdN_Rg/WuhpYBv02fAmB7tjUfF7DG9aUL4'; 

    // Replace the above variable values 


     PushNotifications::android($msg_payload, $regId); 

     PushNotifications::WP8($msg_payload, $uri); 

     PushNotifications::iOS($msg_payload, $deviceToken); 

} 

Спасибо за вашу помощь.

ответ

1

Просто удалите или закомментируйте exit линию на PushNotification: застройщик

PushNotification.php

<?php 

class PushNotifications { 

    public function __construct() { 
     //exit('Init function is not allowed'); 
    } 
... 
Смежные вопросы