我设置了一个urbanairship帐户,用于向我的应用发送推送通知。这一切都正常,但现在我正在尝试将它与我的codeigniter管理站点集成,以便UA发送推送通知并一步存储到数据库。我正在尝试使用cURL库并遵循UA API文档(http://urbanairship.com/docs/push.html),但每次出现404错误。但是,如果我取出cURL行,数据就会很好地添加到数据库中(因此它正在从表单中正确接收数据)。
这是我的控制器中的功能:
function 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和urbanairship的新手,所以你可以想象这有点像噩梦。将不胜感激任何可用的帮助!
谢谢!
答案 0 :(得分:1)
您是否设置了curl配置以信任您尝试连接的网站的ssl证书?首先尝试这个
curl_setopt($curl_handle, CURLOPT_SSL_VERIFYPEER, false);
如果它有效 - 这就是问题所在。然后,您应该正确设置卷曲连接添加特定证书。
答案 1 :(得分:0)
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);
答案 2 :(得分:0)
如果您不熟悉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";
}
}