- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是一名 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);
?>
可不可以??如果有任何建议或其他方式来完成这项工作,请告诉我。
最佳答案
下面的代码是我自己用的,你可以改成自己的方式
根据设备操作系统
if($gcm_id_array['os'] == 'android')
{
$v[$index] = scs_single_gcm($gcm_id_array['gcm_id'],$message);
$index++;
}else{
$v[$index] = scs_single_gcm_ios($gcm_id_array['gcm_id'],$message);
$index++;
}
iOS scs_single_gcm_ios 的功能
function scs_single_gcm_ios($regids,$message)
{
try{
$deviceToken = $regids;
$passphrase = 'Kookdokoo';
$title = $message['title'];
$id = $message['noti_id'];
$ctx = stream_context_create();
stream_context_set_option($ctx, 'ssl', 'local_cert', 'ck.pem');
stream_context_set_option($ctx, 'ssl', 'passphrase', $passphrase);
$fp = stream_socket_client(
'ssl://gateway.push.apple.com:2195', $err,
$errstr, 60, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $ctx);
if (!$fp)
exit("Failed to connect: $err $errstr" . PHP_EOL);
$body['aps'] = array(
'alert' => $title,
'sound' => 'default',
'id' =>$id
);
// Encode the payload as JSON
$payload = json_encode($body);
// Build the binary notification
$msg = chr(0) . pack('n', 32) . pack('H*', $deviceToken) . pack('n', strlen($payload)) . $payload;
// Send it to the server
$result = fwrite($fp, $msg, strlen($msg));
if (!$result)
$result = 0;
else
$result = 1;
// Close the connection to the server
fclose($fp);
return $result;
}
catch(Exception $e){
$e->getMessage();
}
}
安卓
function scs_single_gcm($regids,$message)
{
if(is_array($regids)){
$fields = array(
'registration_ids' => $regids,
'data' => array( "data" => $message ),
);
}else
{
$fields = array(
'registration_ids' => array($regids),
'data' => array( "data" => $message ),
);
}
// Open connection
$ch = curl_init();
if (FALSE === $ch)
throw new Exception('failed to initialize');
// Set the url, number of POST vars, POST data
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSLVERSION, 3);
curl_setopt( $ch, CURLOPT_URL,url );
curl_setopt( $ch, CURLOPT_POST, true );
curl_setopt( $ch, CURLOPT_HTTPHEADER,array(key,content_type));
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
curl_setopt( $ch, CURLOPT_POSTFIELDS, json_encode( $fields ) );
// Execute post
$result = curl_exec($ch);
/*
if (FALSE === $result)
echo curl_error($ch).curl_errno($ch);
// Close connection
curl_close($ch);
if (curl_errno( $ch ) ){
'GCM error: ' . curl_error( $ch );
}
*/
$result = json_decode($result);
$notification = 1;
if($result->success){
$nm = 'push notification success';
$p = 1;
}else{
if($result->results[0]->error == "NotRegistered")
{
$nm = 'push notification success';
$p = 1;
}else{
$nm = 'push notification failed';
$p = 0;
}
}
关于php - 结合 ios (Push notification) 和 android (GCM) API (webservice) 进行通知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37135091/
我最近在/ drawable中添加了一些.gifs,以便可以将它们与按钮一起使用。这个工作正常(没有错误)。现在,当我重建/运行我的应用程序时,出现以下错误: Error: Gradle: Execu
Android 中有返回内部存储数据路径的方法吗? 我有 2 部 Android 智能手机(Samsung s2 和 s7 edge),我在其中安装了一个应用程序。我想使用位于这条路径中的 sqlit
这个问题在这里已经有了答案: What's the difference between "?android:" and "@android:" in an android layout xml f
我只想知道 android 开发手机、android 普通手机和 android root 手机之间的实际区别。 我们不能从实体店或除 android marketplace 以外的其他地方购买开发手
自Gradle更新以来,我正在努力使这个项目达到标准。这是一个团队项目,它使用的是android-apt插件。我已经进行了必要的语法更改(编译->实现和apt->注释处理器),但是编译器仍在告诉我存在
我是android和kotlin的新手,所以请原谅要解决的一个非常简单的问题! 我已经使用导航体系结构组件创建了一个基本应用程序,使用了底部的导航栏和三个导航选项。每个导航选项都指向一个专用片段,该片
我目前正在使用 Facebook official SDK for Android . 我现在正在使用高级示例应用程序,但我不知道如何让它获取应用程序墙/流/状态而不是登录的用户。 这可能吗?在那种情
我在下载文件时遇到问题, 我可以在模拟器中下载文件,但无法在手机上使用。我已经定义了上网和写入 SD 卡的权限。 我在服务器上有一个 doc 文件,如果用户单击下载。它下载文件。这在模拟器中工作正常但
这个问题在这里已经有了答案: What is the difference between gravity and layout_gravity in Android? (22 个答案) 关闭 9
任何人都可以告诉我什么是 android 缓存和应用程序缓存,因为当我们谈论缓存清理应用程序时,它的作用是,缓存清理概念是清理应用程序缓存还是像内存管理一样主存储、RAM、缓存是不同的并且据我所知,缓
假设应用程序 Foo 和 Eggs 在同一台 Android 设备上。任一应用程序都可以获取设备上所有应用程序的列表。一个应用程序是否有可能知道另一个应用程序是否已经运行以及运行了多长时间? 最佳答案
我有点困惑,我只看到了从 android 到 pc 或者从 android 到 pc 的例子。我需要制作一个从两部手机 (android) 连接的 android 应用程序进行视频聊天。我在想,我知道
用于使用 Android 以编程方式锁定屏幕。我从 Stackoverflow 之前关于此的问题中得到了一些好主意,并且我做得很好,但是当我运行该代码时,没有异常和错误。而且,屏幕没有锁定。请在这段代
文档说: android:layout_alignParentStart If true, makes the start edge of this view match the start edge
我不知道这两个属性和高度之间的区别。 以一个TextView为例,如果我将它的layout_width设置为wrap_content,并将它的width设置为50 dip,会发生什么情况? 最佳答案
这两个属性有什么关系?如果我有 android:noHistory="true",那么有 android:finishOnTaskLaunch="true" 有什么意义吗? 最佳答案 假设您的应用中有
我是新手,正在尝试理解以下 XML 代码: 查看 developer.android.com 上的文档,它说“starStyle”是 R.attr 中的常量, public static final
在下面的代码中,为什么当我设置时单选按钮的外观会发生变化 android:layout_width="fill_parent" 和 android:width="fill_parent" 我说的是
很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visit the help center . 关闭 9
假设我有一个函数 fun myFunction(name:String, email:String){},当我调用这个函数时 myFunction('Ali', 'ali@test.com ') 如何
我是一名优秀的程序员,十分优秀!