我尝试使用phonegap-plugin-push with @ionic-native/push plugin
在IONIC 3上进行firebase推送通知工作这是我的离子信息
全球套餐:
Cordova CLI : 7.0.1
本地包裹:
@ionic/app-scripts : 2.1.3
Cordova Platforms : android 6.2.3 ios 4.4.0
Ionic Framework : ionic-angular 3.6.0
系统:
Android SDK Tools : 25.2.2
Node : v8.1.3
OS : macOS Sierra
Xcode : Xcode 8.3.3 Build version 8E3004b
ios-deploy : 1.9.1
ios-sim : 6.0.0
npm : 5.1.0
我无法理解create如何创建通知对象服务器站点以使通知工作在iOS和Android上。 我从通知和数据有效负载中读取了所有差异,然后我无法理解对象必须如何在所有平台上以及所有应用状态(背景和前景)中工作。
这是我的初始对象
$p = array(
'id' => $post['id'],
'title' => $post['title'],
'description' => $post['description'],
'text' => $post['text'],
'image_url' => $post['image_url']
);
$msg = array(
'title' => "test",
'body' => $post['title'],
'post' => $p,
'vibrate' => 1,
'sound' => "default"
);
$fields = array();
$fields['to'] = "/topics/news";
$fields['data'] = $msg;
$fields["notification"] = array('title' => 'test', 'body' => $post['title'], 'sound' => 1);
所以我尝试将数据和通知有效负载放在一起 结果是
唯一的问题是无法在后台控制Android。
如果我在Android上只使用数据有效负载所有工作(可以在后台和前台进入详细信息页面),但在iOS上通知根本不会到达。
如果我只使用通知有效负载通知到达Andorid和iOS但没有数据负载,那么我的应用程序不会转到详细信息页面。
我的问题是: 我应该发送什么样的对象才能使iOS和Android在前台和后台工作?
答案 0 :(得分:0)
我阅读了有关firebase和phonegap-plugin-push的所有文档。 Here我找到了有关通知和数据有效负载的所有解释。 我读到的内容非常奇怪,所以我决定在那里开一个new issue。 但我必须找到解决问题的方法,所以我使用了firebase主题条件。我将解释我的方式,我希望它可以帮助某人。我不喜欢我使用的方式(实际上我希望插件能被修复),但它确实有效。
当我从服务器发送推送通知时,我会创建一个这样的有效负载:
私有函数really_send($ post,$ device_type)// $ device_type == 0 iOS - $ device_type == 1 Android {
$p = array(
'id' => $post['id'],
'title' => $post['title'],
'description' => $post['description'],
'text' => $post['text'],
'image_url' => $post['image_url'],
'date' => $post['date']
);
$msg = array(
'title' => "Title",
'body' => $post['title'],
'post' => $p,
'vibrate' => 1,
'sound' => 1
);
$fields = array();
$fields["priority"] = "high";
if ($device_type == 0) {
$fields['condition'] = "'ios' in topics && 'news' in topics";
$fields["notification"] = array(
'title' => 'Title',
'body' => $post['title'],
'sound' => 'default',
'icon' => 'notification_icon'
);
} else {
$fields['condition'] = "'android' in topics && 'news' in topics";
}
$fields['data'] = $msg;
$url = 'https://fcm.googleapis.com/fcm/send';
$headers = array
(
'Authorization: key=xxxx',
'Content-Type: application/json'
);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($fields));
$result = curl_exec($ch);
}
此函数被调用两次(对于deviceType = 0的iO一次,对于Android的一次,deviceType = 1),我使用topic condition 所以我创建两个不同的有效载荷 通过这种方式,我在背景和前景状态下使iOS和Android都能正常工作