Использование CodeIgniter cURL для отправки push-уведомления через UrbanAirship - PullRequest
4 голосов
/ 19 июня 2011

У меня есть учетная запись городского округа, настроенная для отправки push-уведомлений в мое приложение. Это все работает, но сейчас я пытаюсь интегрировать его с моим сайтом администратора codeigniter, чтобы push-уведомления отправлялись UA и сохранялись в базе данных за один шаг. Я пытаюсь использовать библиотеку cURL и следую документации API UA, (http://urbanairship.com/docs/push.html),, но каждый раз, когда я получаю ошибку 404. Однако, если я вынимаю строки cURL, данные добавляются в базу данных нормально (так что правильно получает данные из формы).

Вот функция в моем контроллере:

функция saveAnnouncement () {

  $this->load->helper('html');
  $this->load->library('session');
  $this->load->helper('json');
  $this->load->library('curl');

  $new_announcement = $this->input->post('announcement_text');

  if($this->session->userdata('logged_in') != true)
  {
      redirect('/admin/login');
  }

  $this->curl->create('https://go.urbanairship.com/api/push/broadcast/');
  $this->curl->http_login('<application key>', '<master secret>');
  $announcement_push = array('aps'=>array('alert'=>$new_announcement, 'sound'=>'default'));
  $announcement_push['encoded_data'] = json_encode($announcement_push);
  $this->curl->post($announcement_push);
  $this->curl->execute();

  $this->load->model('Announcements');
  $this->Announcements->Add($new_announcement);
  redirect('/admin/announcements');

}

Я новичок в Codeigniter, Curl и Urbanship, так что, как вы можете себе представить, это немного кошмар. Буду благодарен за любую доступную помощь!

Спасибо!

Ответы [ 3 ]

1 голос
/ 19 июня 2011

Вы установили свою конфигурацию curl, чтобы доверять ssl-сертификату сайта, который вы пытаетесь подключить? Сначала попробуйте с этим

 curl_setopt($curl_handle, CURLOPT_SSL_VERIFYPEER, false); 

и если это работает - вот в чем проблема. Затем вы должны правильно настроить подключение, добавив определенный сертификат.

0 голосов
/ 22 октября 2013

Просто используйте обычный curl, если вы не знакомы с Codeigniter!

public function pushNotification(){
    // Urban AirShip Doc : http://docs.urbanairship.com/connect/android_push.html

    // create the contents of the android field
    // sample JSON => {"audience": "all", "notification": {"alert": "Hello!"}, "device_types": ["android"]}

    $android = array();
    $android['audience'] = "all";
    $android['notification'] = array('alert'=>'Hello !');
    $android['device_types'] = array("android");

    // convert the dictionary to a json string
    $data = json_encode($android);

    // open connection
    $ch = curl_init();

    // the url and credentials for posting to urban airship
    $url = 'https://go.urbanairship.com/api/push/';
    $username = "YourAPIkey";
    $password = "YourMasterSecretKey";

    // set the url, number of POST vars, POST data
    curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json','Accept: application/vnd.urbanairship+json; version=3;'));
    curl_setopt($ch, CURLOPT_USERPWD, $username . ':' . $password);
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

    // execute post
    $result = curl_exec($ch);
    $arrayResult=json_decode($result);

    // close connection
    $res = curl_close($ch);

    if($arrayResult->ok == 1){
            print "Success";
    } else {
            print "Error";

    }
}

Ссылка: http://blog.jamesbaca.net/?p=385

0 голосов
/ 13 декабря 2011

Этот код в PHP, Urbanairship, curl работал для меня:

define ('URBAN_APP_MASTERKEY', XXXXXX);
define ('URBAN_APIKEY',XXXXX);
define ('URBAN_APP_SECRETKEY',XXXXXX);
define('PUSHURL', 'https://go.urbanairship.com/api/push/');

$contents = array();
$contents['badge'] = "1";
$contents['alert'] = "Howdy, doody";
$contents['sound'] = "cat.caf";

$devices = array('device_tokens');

$push = array("aps" => $contents);
$push['device_tokens'] = $devices;

$json = json_encode($push);
$url = PUSHURL;
echo $json; //display the actual content

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_USERPWD, URBAN_APIKEY . ':' . URBAN_APP_MASTERKEY);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, "$json");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, True);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_HTTPHEADER, array("Content-Type: application/json"));

$output = curl_exec($ch);

if($response['http_code'] != 200)
{ 
    echo "Got negative response from server, http code: ". 
    $response['http_code'] . "\n";
}
else
{ 
    echo "Wow, it worked!\n"; 
}

curl_close($ch); 
...