收到来自 Ionic 推送的通知时如何打开到特定状态?

Posted

技术标签:

【中文标题】收到来自 Ionic 推送的通知时如何打开到特定状态?【英文标题】:How to open to a specific state when receiving a notification from Ionic push? 【发布时间】:2015-10-01 01:23:02 【问题描述】:

我使用 Ionic 和 ios 成功设置了推送通知。但我希望人们点击通知并进入动态传递状态。而且我不知道该怎么做...... 我正在使用节点服务器。首先,我的状态升级如下:

.state('app.task', 
url: "/task/:taskId",
cache: false,
views: 
  'menuContent': 
    templateUrl: "js/tasks/task-detail.html",
    controller: "browseCtrl",
  
,

)

在我的节点服务器中,我按照此处所述传递有效负载:Ionic.io Push FAQ

var payload = "$state":"app.task", "$stateParams": "\"taskId\": \""+ message.relatedTask +"\"";
request(
    url: "https://push.ionic.io/api/v1/push",
    method: "POST",
    json: true,
    body: 
      "tokens": [token],
      "notification": 
        "alert": message.message,
        "ios": 
          "badge":1,
          "payload": payload
        ,
        "android": 
          "payload": payload
        
      
    ,
    headers: 
      'Authorization': 'Basic ' + btoa(IONIC_PRIVATE_API_KEY + ":"),
      'X-Ionic-Application-Id': IONIC_APP_ID
    
  , function (error, response, body) 
    console.log(body);
  )

当它点击通知时,它不会进入状态(只是把我带回应用程序)。 message.relatedTask 记录为当前任务 ID。正如我从 XCode 控制台看到的那样,它记录了以下内容:

2015-09-30 18:12:16.488 VideoHappy[1236:403171] Msg: "$state":"app.task","$stateParams":"\"taskId\": \"-JzvWR67jIqyfc9JhDMb\"","$state":"app.task","$stateParams":"\"taskId\": \"-JzvWR67jIqyfc9JhDMb\"","badge":"1","body":"Test Title",foreground:"0"

2015-09-30 18:12:16.600 VideoHappy[1236:403171] $ionicPush:RECEIVED "$state":"app.task","$stateParams":"\"taskId\": \" -JzvWR67jIqyfc9JhDMb\"","badge":"1","body":"测试标题","foreground":"0"

我做错了什么?

【问题讨论】:

对不起。我收回我所说的话并删除我的评论。感谢您的帮助! 【参考方案1】:

问题出在我放置 $ionicPush.register 的位置,如下所示:

$ionicPush.register(
    canShowAlert: false, //Can pushes show an alert on your screen?
    canSetBadge: true, //Can pushes update app icon badges?
    canPlaySound: true, //Can notifications play a sound?
    canRunActionsOnWake: true, //Can run actions outside the app,
    onNotification: function(notification) 
      // Handle new push notifications here
      console.log(notification);
      return true;
    
  );

我在用户注册或登录时放置此代码。因此,当通知进来时,onNotification 实际不会运行。相反,我将此代码放在我的 app.js 文件的 app.run 中,如下所示:

.run(function($ionicPlatform, $ionicPush, $state) 
    $ionicPlatform.ready(function() 
        [go here instead]
    );
)

关键是您必须确保您的应用程序始终运行推送注册调用,而不仅仅是注册或登录或像 Ionic 演示那样单击按钮。我通过这里找到了这个(来源:Raymond Camden):http://www.raymondcamden.com/2015/07/02/ionic-push-example-supporting-state-changes

在发布 Ionic 推送通知之前,也请阅读该帖子以了解您可能想知道的其他问题 :)

【讨论】:

以上是关于收到来自 Ionic 推送的通知时如何打开到特定状态?的主要内容,如果未能解决你的问题,请参考以下文章

在 ionic 3 中点击 One Signal 推送通知时如何导航到特定页面?

打开应用程序并锁定屏幕时未收到 Ionic FCM 推送通知,除非被点击

如何让你的推送通知打开某个视图控制器?

如何使用 ionic 3 和 Firebase Cloud Messaging 从通知栏打开特定页面?

在 Ionic 3 应用程序上收到推送通知时调用哪个函数?

Ionic android 推送通知仅在后台工作