2011-06-19 91 views
4

我有一个urbanairship帐户,用于向我的应用发送推送通知。这是所有工作,但现在我试图将其与我的codeigniter管理网站集成,以便推送通知由UA发送并一步存储到数据库中。我正在尝试使用cURL库并遵循UA API文档(http://urbanairship.com/docs/push.html),但每次遇到404错误。但是,如果我将cURL行取出,数据将被添加到数据库中,因此它正在从表单中正确接收数据。使用CodeIgniter cURL通过UrbanAirship发送推送通知

下面是我的控制器的功能:)

功能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'); 

}

我是新来的笨,卷曲和urbanairship,所以你可以想象这是一个噩梦。将感谢任何帮助!

谢谢!

+0

我开始笨库urbanairship这里:https://github.com/caioiglesias/Urban-Airship-CodeIgniter-library –

+0

现在,他们想要钱!没有更多的免费推! –

回答

1

您是否已将卷曲配置设置为信任您尝试连接的站点的ssl证书?先试试这个

curl_setopt($curl_handle, CURLOPT_SSL_VERIFYPEER, false); 

如果它工作 - 这就是问题所在。然后,您应该正确设置卷曲连接,添加特定的证书。

+0

感谢您的建议。不幸的是,它仍然给我404错误:S – Andy

0

这段代码在PHP,Urbanairshipcurl工作对我来说:

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

这会让你发送到个人设备? $ devices是phoneID的数组? – Siriss

+0

@Siriss yes $ devices是一组电话号码。它会发送到个人设备 –

+0

谢谢Darshit-美元设备如何填充?我被困在这个问题上。 – Siriss

0

只需使用正常卷曲,如果你不熟悉笨!

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