我有一个Phonegap应用程序,我在其中使用PushPlugin实现了推送通知。当用户点击接收到的通知时,我正在显示本地通知,该通知包含基于推送通知的有效负载的特定页面的链接(按钮)。为此,我当然使用通知回调方法。
在Android和iOS上一切正常。如果WP应用程序在收到推送通知时打开,它也可以工作。我遇到问题的地方是应用程序没有运行并且点击了toast,因为通知回调方法永远不会被触发。这并不意外,因为我知道这是WP的正常行为。
我要做的是在消息的有效负载中设置launch page
。我正在使用Telerik后端服务,因此我按documentation中指定的方式发送消息:
"WindowsPhone": {
"Toast": {
"Title": title,
"Message": message,
"LandingUri": uri
}
}
当我在回调中检查收到的通知时,它看起来像这样:
{
"jsonContent": {
"wp:Text1": title,
"wp:Text2": message,
"wp:Param": uri
},
"type": "toast"
}
我尝试以多种不同的方式设置LandingUri
,例如:
//www/index.html#api/my-page
和x-wmapp0:www/index.html#api/my-page
我正在使用Backbone Marionette路由器,所以这就是为什么网址设置如下:#api /。
问题是,它永远不会落在我试图设置的页面上。它大部分时间都落在索引页面上,有时应用程序甚至会在它开始之前崩溃。没有收到任何错误,它只是关闭。
对于Windows Phone,我是一个完全的菜鸟,所以我的问题是:我应该如何在对象中设置着陆页的uri?
或者,是否有任何其他方式来实现我想要的行为,即:根据推送通知中收到的uri导航到我的应用程序内的特定页面(在点击toast之后)并且应用程序没有运行)?
有关其他信息,我正在使用Phonegap Build。如果需要,我也非常乐意提供更多信息。
我花了好几个小时,这非常令人沮丧。如果有人能帮助我,我将非常感激。
答案 0 :(得分:1)
在PhoneGap Build项目中,您可以在MainPage.xaml.cs文件的OnNavigatedTo方法中添加其他逻辑。如果该方法不可用,您仍然可以覆盖它。
只需在MainPage.xaml.cs中引用的链接中添加逻辑即可。 例如:
protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e) {
base.OnNavigatedTo(e);
try {
var location = this.NavigationContext.QueryString["NavigateTo"];
if (location!= null) {
this.CordovaView.StartPageUri = new Uri ("//www/" + location, UriKind.Relative);
}
} catch (KeyNotFoundException) {}
}
然后在发送推送通知后,将以下值添加到“LandingUri”字段:
“/ MainPage.xaml中?的NavigateTo = appnews.html” 其中appnews.html是您应用的www文件夹中的HTML文件。 我希望这会有所帮助。