Ionic 3 发送带有 Firebase 数据与通知有效负载的推送通知



我试图使用 phonegap-plugin-push 和 @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 

我不明白如何创建通知对象服务器站点以使通知适用于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 背景 ->通知已到达,但未调用 on("通知"(,因此我无法浏览详细信息页面
  • iOS 前台 ->通知已送达,我可以转到详细信息页面
  • iOS 背景 ->通知已送达,我可以转到详细信息页面

唯一的问题是无法在后台控制Android。

如果我在 Android 上只使用数据有效负载,一切正常(可以在后台和前台转到详细信息页面(,但在 iOS 通知上根本没有到达。

如果我只使用通知有效负载通知到达 Andorid 和 iOS,但没有数据有效负载,所以我的应用程序不会转到详细信息页面。

我的问题是: 我应该发送什么样的对象才能使iOS和Android在前台和后台工作?

我阅读了有关Firebase和phonegap-plugin-push的所有文档。 在这里,我找到了有关通知和数据有效负载的所有解释。 我读到的东西很奇怪,所以我决定在那里打开一个新问题。 但是我必须找到一种方法来解决我的问题,所以我使用了Firebase主题条件。我会解释我的方式,我希望它可以帮助某人。我不喜欢我使用的方式(实际上我希望插件会被修复(,但它有效。

  1. 我在 .ts 文件上导入平台,其中应用程序在主题新闻中订阅。
  2. 如果
  3. 平台是iOS,我订阅了应用程序主题">ios">,如果平台是Android,则订阅了"android"。
  4. 当我从服务器发送推送通知时,我创建了一个这样的有效负载:

    私有函数 really_send($post, $device_type(//$device_type == 0 iOS - $device_type == 1 安卓 {

    $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);
    

    }

此函数被调用两次(一次用于设备类型 = 0 的 iOS,一次用于设备类型 = 1 的 Android(,我使用主题条件 所以我创建了两个不同的有效载荷。 通过这种方式,我使其在后台和前台状态下同时适用于iOS和Android

相关内容

  • 没有找到相关文章

最新更新