Ionic 3 发送带有 firebase 数据的推送通知与通知有效负载
Ionic 3 send push notification with firebase data vs notification payload
我正在尝试使用 phonegap-plugin-push with @ionic-native/push plugin
让 firebase 推送通知在 IONIC 3 上工作
这是我的 Ionic 信息
全局包:
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
我无法理解如何创建通知对象服务器站点来使通知工作 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 后台 -> 通知到达但未调用 on('notification'),因此我无法浏览详细信息页面
- iOS前台->通知到了,我可以去详情页了
- iOS后台->通知到了,我可以去详情页了
唯一的问题是后台无法控制Android。
如果我在 Android 上仅使用 数据负载 一切正常(可以在后台和前台转到详细信息页面)但在 iOS 通知上不要都到了。
如果我只使用 通知负载 通知到达 Andorid 和 iOS 但没有数据负载,所以我的应用程序不会转到详细信息页面。
我的问题是:
我应该发送什么样的对象才能使 iOS 和 Android 在前台和后台工作?
我阅读了所有关于 firebase 和 phonegap-plugin-push 的文档。
Here 我找到了所有关于通知和数据负载的解释。
我读到的东西很奇怪,所以我决定在那里开一个 new issue。
但是我必须找到解决问题的方法,所以我使用了 firebase 主题条件。我会解释我的方式,我希望它能帮助别人。我不喜欢我使用的方式(事实上我希望插件会被修复),但它有效。
- 我在 .ts 文件上导入平台,其中 App 在主题 news.
上订阅
- 如果平台是 iOS 或 'android',我为应用订阅了一个主题 'ios'如果平台是 Android.
当我从服务器发送推送通知时,我创建了一个有效负载,如下所示:
私有函数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);
}
这个函数被调用了两次(一次是 iOs,deviceType = 0,一次是 Android,deviceType = 1),我使用 topic condition
所以我创建了两个不同的有效负载。
通过这种方式,我使它在后台和前台状态iOS和Android中工作
我正在尝试使用 phonegap-plugin-push with @ionic-native/push plugin
让 firebase 推送通知在 IONIC 3 上工作这是我的 Ionic 信息
全局包:
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
我无法理解如何创建通知对象服务器站点来使通知工作 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 后台 -> 通知到达但未调用 on('notification'),因此我无法浏览详细信息页面
- iOS前台->通知到了,我可以去详情页了
- iOS后台->通知到了,我可以去详情页了
唯一的问题是后台无法控制Android。
如果我在 Android 上仅使用 数据负载 一切正常(可以在后台和前台转到详细信息页面)但在 iOS 通知上不要都到了。
如果我只使用 通知负载 通知到达 Andorid 和 iOS 但没有数据负载,所以我的应用程序不会转到详细信息页面。
我的问题是: 我应该发送什么样的对象才能使 iOS 和 Android 在前台和后台工作?
我阅读了所有关于 firebase 和 phonegap-plugin-push 的文档。 Here 我找到了所有关于通知和数据负载的解释。 我读到的东西很奇怪,所以我决定在那里开一个 new issue。 但是我必须找到解决问题的方法,所以我使用了 firebase 主题条件。我会解释我的方式,我希望它能帮助别人。我不喜欢我使用的方式(事实上我希望插件会被修复),但它有效。
- 我在 .ts 文件上导入平台,其中 App 在主题 news. 上订阅
- 如果平台是 iOS 或 'android',我为应用订阅了一个主题 'ios'如果平台是 Android.
当我从服务器发送推送通知时,我创建了一个有效负载,如下所示:
私有函数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);
}
这个函数被调用了两次(一次是 iOs,deviceType = 0,一次是 Android,deviceType = 1),我使用 topic condition 所以我创建了两个不同的有效负载。 通过这种方式,我使它在后台和前台状态iOS和Android中工作