【发布时间】:2016-05-10 09:57:03
【问题描述】:
我是一名 Android 开发人员,所以我对 PHP 了解不多。
我们正在开发 Android 和 IOS 的试卷应用程序。并创建完美的通知功能。但问题是 IOS 使用推送通知而 android 使用 GCM。这两个使用不同的api。
我的问题是如何结合这两个 api。我想将这两个 api (webservice) 合二为一。当管理员上传文件时,所有用户都会使用通知天气收到通知,它是 android 或 IOS 设备。
我该怎么办?帮助非常感谢提前感谢。我正在使用这个 LINK
这是我的努力
Android API
<?php
require_once('connect.php');
// API access key from Google API's Console
define( 'API_ACCESS_KEY', 'AIzaSyBWcc6ONXvNEHECxzLwFDSDCTKDTjEhfT8' );
//$registrationIds = array( $_GET['id'] );
$conn = new mysqli('host name', 'server name', 'password', 'database name');
$select_qury = "SELECT gcm_registration_id FROM gtu_registration";
$result = $conn->query($select_qury);
$registrationIds = array();
while($row = $result->fetch_assoc()){
array_push($registrationIds, $row['gcm_registration_id']);
}
// prep the bundle
$msg = array
(
'message' => 'here is a message. message',
'title' => 'This is a title. title',
'subtitle' => 'This is a subtitle. subtitle',
'tickerText'=> 'Ticker text here...Ticker text here...Ticker text here',
'vibrate' => 1,
'sound' => 1,
'largeIcon' => 'large_icon',
'smallIcon' => 'small_icon'
);
//Creating a new array fileds and adding the msg array and registration token array here
$fields = array
(
'registration_ids' => $registrationIds,
'data' => $msg
);
//Adding the api key in one more array header
$headers = array
(
'Authorization: key=' . API_ACCESS_KEY,
'Content-Type: application/json'
);
$ch = curl_init();
curl_setopt( $ch,CURLOPT_URL, 'https://android.googleapis.com/gcm/send' );
curl_setopt( $ch,CURLOPT_POST, true );
curl_setopt( $ch,CURLOPT_HTTPHEADER, $headers );
curl_setopt( $ch,CURLOPT_RETURNTRANSFER, true );
curl_setopt( $ch,CURLOPT_SSL_VERIFYPEER, false );
curl_setopt( $ch,CURLOPT_POSTFIELDS, json_encode( $fields ) );
$result = curl_exec($ch );
curl_close( $ch );
//Decoding json from result
$res = json_decode($result);
$flag = $res->success;
//if success is 1 means message is sent
if($flag == 1){
//Redirecting back to our form with a request success
header('Location: index.php?success');
}else{
//Redirecting back to our form with a request failure
header('Location: index.php?failure');
}
echo $result;
IOS API
<?php
$token ='f1088d1c0603218b31b5a26210c4b0e60e4884225235c7f5c2e55c47b937a03d';
$deviceToken = $token; // token dell'iPhone a cui inviare la notifica
// Passphrase for the private key (ck.pem file)
$pass = "mac12345";
// Get the parameters from http get or from command line
$message = 'Notification text';
$badge = 1;
$sound = 'default';
// Construct the notification payload
$body = array();
$body['aps'] = array('alert' => $message);
if ($badge)
$body['aps']['badge'] = $badge;
if ($sound)
$body['aps']['sound'] = $sound;
/ End of Configurable Items /
$ctx = stream_context_create();
stream_context_set_option($ctx, 'ssl','local_cert', 'Gtuck.pem');
// assume the private key passphase was removed.
stream_context_set_option($ctx, 'ssl', 'passphrase', $pass);
$fp = stream_socket_client('ssl://gateway.sandbox.push.apple.com:2195', $err, $errstr, 120, STREAM_CLIENT_CONNECT, $ctx);
$payload = json_encode($body);
$msg = chr(0).pack('n',32).pack('H*', str_replace(' ', '', $deviceToken)).pack('n',strlen($payload)).$payload;
print "" . $payload . "\n";
fwrite($fp, $msg);
fclose($fp);
?>
有没有可能??如果有任何建议或其他方式来完成这项工作,请告诉我。
【问题讨论】:
标签: php android ios web-services notifications