1

我试着去做出离子3火力点推送通知工作中使用phonegap-plugin-push with @ionic-native/push plugin离子与火力数据VS通知有效载荷3发送推送通知

这是我的离子信息

全球套餐:

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。 我从通知和数据有效负载读取所有aboout区别,然后我无法理解该对象必须是如何工作在所有平台和所有应用程序状态(背景和前景)。

这是我最初的目标

$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的前景 - >通知来了,我可以去详细页面
  • iOS的背景 - >通知来了,我可以去详细页面

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

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

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

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

回答

0

我阅读了关于firebase和phonegap-plugin-push的所有文档。 Here我发现了关于通知和数据有效载荷的所有解释。 我读的很奇怪,所以我决定在那里打开new issue。 但是我不得不寻找出路解决我的问题,所以我使用了firebase主题条件。我会解释我的方式,我希望它可以帮助别人。我不喜欢我使用的方式(实际上我希望插件能够被修复),但它很有用。

  1. 我导入平台上。ts文件,其中App订阅了主题消息
  2. 我订阅了一个主题'ios' if if platform is iOS or 'android' if if platform is Android。
  3. 当我从服务器发送推送通知我创建这样一个有效载荷:

    私有函数really_send($后,$ 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); 
    

    }

此功能(用于与设备类型= 0 IOS和一次为Android与设备类型= 1一次)调用两次和我使用topic condition 所以我创建了两个不同的有效载荷。 通过这种方式,我使iOS和Android在后台和前台状态下都能工作