我正在尝试在我的Ionic 2应用程序中使用cordova fcm plugin。我使用..
安装了插件ionic plugin add cordova-plugin-inappbrowser
ionic plugin add cordova-plugin-fcm
ionic plugin add cordova-plugin-velda-devicefeedback
并将以下代码添加到app.component.ts
declare var FCMPlugin;
@Component({
templateUrl: 'app.html'
})
export class MyApp {
rootPage = TabsPage;
constructor(platform: Platform, private toastCtrl: ToastController) {
platform.ready().then(() => {
StatusBar.styleDefault();
Splashscreen.hide();
this.setupNotifications();
});
}
private setupNotifications() {
try {
let fcmPlugin = FCMPlugin;
fcmPlugin.getToken(
function (token) {
this.log(token);
},
function (err) {
this.log("error retrieving token: " + err);
});
fcmPlugin.onNotification(function (notification) {
this.log("got notification");
this.log(JSON.stringify(notification));
}, function (error) {
this.log(error);
});
}
catch (exception) {
this.log(exception);
}
}
private log(m: any): void {
let toast = this.toastCtrl.create({
message: m,
duration: 5000
});
toast.present();
}
我为Android构建应用并安装在我的Android手机上。
我没有得到任何"未定义"我运行应用程序时出错。然后我使用Firebase message console拍摄一些消息。
如果我的Ionic应用程序已关闭,我做在我的设备上获取nofication,如果我点击它,它 打开应用程序,所以这部分似乎工作。
但是,当应用程序处于打开状态时,我不会一直调用onNotification
。
有谁知道这里有什么问题吗?我打电话来正确设置吗?
提前感谢您的帮助!
[编辑]
Jorge的回答是我需要click_action
,你无法通过控制台发送。{1}}所以我现在正试图通过POSTMAN发送。这个doco似乎非常差,或者至少很难在一个地方找到所有东西。例如,在标题中包括什么。
无论如何,通过使用POSTMAN的试错,我使用以下标题..
Access-Control-Allow-Origin: *
Content-Type: application/json
Authorization: key=myappkey
我正在使用以下网址https://fcm.googleapis.com/fcm/send
以及正文中的以下内容......
{
"notification":{
"title":"Notification title",
"body":"Notification body",
"sound":"default",
"click_action":"FCM_PLUGIN_ACTIVITY",
"icon":"fcm_push_icon"
},
"data":{
"param1":"value1",
"param2":"value2"
},
"to":"",
"priority":"high",
"restricted_package_name":""
}
POSTMAN返回200,但我的设备上什么都没有,无论应用程序是否正在运行。
[EDIT2]
我注意到POSTMAN 返回错误
{
"multicast_id": 5810330647165506849,
"success": 0,
"failure": 1,
"canonical_ids": 0,
"results": [
{
"error": "InvalidRegistration"
}
]
}
然后我尝试了fiddler,并得到了一个不同的错误(尽管仍然返回了200状态)
HTTP/1.1 200 OK
Access-Control-Allow-Origin: *
Content-Type: application/json
X-Cloud-Trace-Context: 2ae6d1bccf7e610bf4c91bd7ef482b5e;o=1
Date: Sun, 04 Dec 2016 14:43:52 GMT
Server: Google Frontend
Content-Length: 62
Alt-Svc: quic=":443"; ma=2592000; v="36,35,34"
{"result":1, "message":"JSONObject[\"recipient\"] not found."}
我之后也添加了一个从getToken调用返回到的标记ID到"到#34;字段。
任何进一步的想法将不胜感激! 谢谢
答案 0 :(得分:1)
我想您可能忘了在通知中添加click_action
字段。它必须如下所示:
{
"notification":{
"title":"Notification title", //Any value
"body":"Notification body", //Any value
"sound":"default", //If you want notification sound
"click_action":"FCM_PLUGIN_ACTIVITY", //Must be present for Android
"icon":"fcm_push_icon" //White icon Android resource
},
"data":{
"param1":"value1", //Any data to be retrieved in the notification callback
"param2":"value2"
},
"to":"/topics/topicExample", //Topic or single device
"priority":"high", //If not set, notification won't be delivered on completely closed iOS app
"restricted_package_name":"" //Optional. Set for application filtering
}
确保您已包含"click_action":"FCM_PLUGIN_ACTIVITY"
,因为这是点击通知时应触发的意图。
希望它有所帮助!