PHP Classes

File: class.push.php

Recommend this page to a friend!
  Classes of YoungHyeong Ryu   PHP Push Notification Android and iOS   class.push.php   Download  
File: class.push.php
Role: Class source
Content type: text/plain
Description: GCM and Apns API Class
Class: PHP Push Notification Android and iOS
Send push notifications to Android and iOS devices
Author: By
Last change: changed filename and remove somecode for ci
Date: 9 years ago
Size: 6,447 bytes
 

Contents

Class file image Download
<?php
/**
 * Copyright 2014 Shop-Wiz.Com.
 *
 * Licensed under the Apache License, Version 2.0 (the "License"); you may
 * not use this file except in compliance with the License. You may obtain
 * a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
 * License for the specific language governing permissions and limitations
 * under the License.
 */

class pushmessage{
    
    
    
    public
$androidAuthKey = "Android Auth Key Here";
    public
$iosApnsCert = "./certification/xxxxx.pem";
   
    
/**
     * For Android GCM
     * $params["msg"] : Expected Message For GCM
     */
   
private function sendMessageAndroid($registration_id, $params) {
       
$this->androidAuthKey = "Android Auth Key Here";//Auth Key Herer
        
        ## data is different from what your app is programmed
       
$data = array(
               
'registration_ids' => array($registration_id),
               
'data' => array(
                               
'gcm_msg' => $params["msg"]
                            )
                );
        
        
       
$headers = array(
       
"Content-Type:application/json",
       
"Authorization:key=".$this->androidAuthKey
       
);
        
        
       
$ch = curl_init();
       
curl_setopt($ch, CURLOPT_URL, "https://android.googleapis.com/gcm/send");
       
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
       
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
       
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
       
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
       
curl_setopt($ch, CURLOPT_POST, true);
       
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
       
$result = curl_exec($ch);
       
//result sample {"multicast_id":6375780939476727795,"success":1,"failure":0,"canonical_ids":0,"results":[{"message_id":"0:1390531659626943%6cd617fcf9fd7ecd"}]}
        //http://developer.android.com/google/gcm/http.html // refer error code
       
curl_close($ch);
       
       
$rtn["code"] = "000";//means result OK
       
$rtn["msg"] = "OK";
       
$rtn["result"] = $result;
        return
$rtn;
       
     }
    
    
   
/**
     * For IOS APNS
     * $params["msg"] : Expected Message For APNS
     */
   
private function sendMessageIos($registration_id, $params) {
       
       
$ssl_url = 'ssl://gateway.push.apple.com:2195';
       
//$ssl_url = 'ssl://gateway.sandbox.push.apple.com:2195; //For Test
       
       
$payload = array();
       
$payload['aps'] = array('alert' => array("body"=>$params["msg"], "action-loc-key"=>"View"), 'badge' => 0, 'sound' => 'default');
       
## notice : alert, badge, sound

                
        ## $payload['extra_info'] is different from what your app is programmed, this extra_info transfer to your IOS App
       
$payload['extra_info'] = array('apns_msg' => $params["msg"]);
       
$push = json_encode($payload);
        
       
//Create stream context for Push Sever.
       
$streamContext = stream_context_create();
       
stream_context_set_option($streamContext, 'ssl', 'local_cert', $this->iosApnsCert);

       
$apns = stream_socket_client($ssl_url, $error, $errorString, 60, STREAM_CLIENT_CONNECT, $streamContext);
        if (!
$apns) {

           
$rtn["code"] = "001";
           
$rtn["msg"] = "Failed to connect ".$error." ".$errorString;
            return
$rtn;
        }
        
       
//echo 'error=' . $error;
       
$t_registration_id = str_replace('%20', '', $registration_id);
       
$t_registration_id = str_replace(' ', '', $t_registration_id);
       
$apnsMessage = chr(0) . chr(0) . chr(32) . pack('H*', str_replace(' ', '', $t_registration_id)) . chr(0) . chr(strlen($push)) . $push;
        
       
$writeResult = fwrite($apns, $apnsMessage);
       
fclose($apns);
       
       
$rtn["code"] = "000";//means result OK
       
$rtn["msg"] = "OK";
        return
$rtn;

    }
//private function sendMessageIos($registration_id, $msg, $link, $type) {
          
           
       
       /**
     * Send message to SmartPhone
     * $params [pushtype, msg, registration_id]
     */
      
public function sendMessage($params){
          
       
//$parm = array("msg"=>$params["msg"]);
       
if($params["registration_id"] && $params["msg"]){
               switch(
$params["pushtype"]){
                   case
"ios":
                   
$this->sendMessageIos($params["registration_id"], $params);
                    break;
                case
"android":
                   
$this->sendMessageAndroid($params["registration_id"], $params);
                    break;
               }
        }

       }
   
  
   
/*
     * Sample For database
     * regist phone Id from Phone to Mysql via controllers
     * Look a tableSchema at the bottom
     * @ $params["appType"] : android or ios..
     * @ $params["appId"] : //APA91bGEGu5NSyYDYp5OMO4mZ0j1n2DznGARaNFVcCYfLHvHat..... or 6b1653ad818a89fc6937f5067a9b372aec79edeb9504d6ef....
     **/
   
public function registration($params){
       
$pushtype = $params["pushtype"];
       
$idphone = $params["idphone"];
       
       
print_r($params);
       
//{insert into database}
       
echo json_encode($rtn);
    }
    
    
   
/**
     * Step 2.
     * Send message to each iphone from web App.
     * @params : Array() : messages ()
     */
   
public function send($params){
       
//$sql = "select pushtype, idphone from gcmapns ";
       // $rows = $CI->db->get_rows($sql);
       //get data from database and save to $rows
       
if(is_array($rows)){
            foreach(
$rows as $key => $val){
                switch(
$val["pushtype"]){
                    case
"ios":
                       
$rtn = $this->sendMessageIos($val["idphone"], $params);
                        break;
                    case
"android":
                       
$rtn = $this->sendMessageAndroid($val["idphone"], $params);
                        break;
                }
//switch($val["pushtype"]){
           
}//foreach($rows as $key => $val){
       
}//if(is_array($rows)){

        
   
}//function send(){
           
        
    

                
}