离子 2/3 中的一个信号附加数据
one signal additional data in ionic 2/3
我正尝试在我的 ionic 2 应用程序中使用一个信号插件
我已经安装了 Onesignal,它运行良好,但我不知道如何使用 handleNotificationOpened
功能
根本没有文件(什么都没找到)
这是我的代码:
this.oneSignal.handleNotificationReceived().subscribe((msg) => {
// o something when notification is received
});
但我不知道如何使用 msg
获取数据。
有什么帮助吗? link?
坦克你
以下是当应用程序从通知启动时我将用户重定向到相关页面的方法。
app.component.ts
this.oneSignal.handleNotificationOpened().subscribe((data) => {
let payload = data; // getting id and action in additionalData.
this.redirectToPage(payload);
});
redirectToPage(data) {
let type
try {
type = data.notification.payload.additionalData.type;
} catch (e) {
console.warn(e);
}
switch (type) {
case 'Followers': {
this.navController.push(UserProfilePage, { userId: data.notification.payload.additionalData.uid });
break;
} case 'comment': {
this.navController.push(CommentsPage, { id: data.notification.payload.additionalData.pid })
break;
}
}
}
更好的解决方案是重置当前导航堆栈并重新创建它。为什么?
让我们看看这个场景:
TodosPage(根页面)-> TodoPage(推送)-> CommentsPage(推送)
如果您直接转到 CommentsPage,"go back" 按钮将无法按预期工作(它消失了或将您重定向到...谁知道在哪里 :D)。
所以这是我的建议:
this.oneSignal.handleNotificationOpened().subscribe((data) => {
// Service to create new navigation stack
this.navigationService.createNav(data);
});
navigation.service.ts
import {Injectable} from '@angular/core';
import {App} from 'ionic-angular';
import {TodosPage} from '../pages/todos/todos';
import {TodoPage} from '../pages/todo/todo';
import {CommentsPage} from '../pages/comments/comments';
@Injectable()
export class NavigationService {
pagesToPush: Array<any>;
constructor(public app: App) {
}
// Function to create nav stack
createNav(data: any) {
this.pagesToPush = [];
// Customize for different push notifications
// Setting up navigation for new comments on TodoPage
if (data.notification.payload.additionalData.type === 'NEW_TODO_COMMENT') {
this.pagesToPush.push({
page: TodoPage,
params: {
todoId: data.notification.payload.additionalData.todoId
}
});
this.pagesToPush.push({
page: CommentsPage,
params: {
todoId: data.notification.payload.additionalData.todoId,
}
});
}
// We need to reset current stack
this.app.getRootNav().setRoot(TodosPage).then(() => {
// Inserts an array of components into the nav stack at the specified index
this.app.getRootNav().insertPages(this.app.getRootNav().length(), this.pagesToPush);
});
}
}
希望对您有所帮助:)
我正尝试在我的 ionic 2 应用程序中使用一个信号插件
我已经安装了 Onesignal,它运行良好,但我不知道如何使用 handleNotificationOpened
功能
根本没有文件(什么都没找到)
这是我的代码:
this.oneSignal.handleNotificationReceived().subscribe((msg) => {
// o something when notification is received
});
但我不知道如何使用 msg
获取数据。
有什么帮助吗? link? 坦克你
以下是当应用程序从通知启动时我将用户重定向到相关页面的方法。
app.component.ts
this.oneSignal.handleNotificationOpened().subscribe((data) => {
let payload = data; // getting id and action in additionalData.
this.redirectToPage(payload);
});
redirectToPage(data) {
let type
try {
type = data.notification.payload.additionalData.type;
} catch (e) {
console.warn(e);
}
switch (type) {
case 'Followers': {
this.navController.push(UserProfilePage, { userId: data.notification.payload.additionalData.uid });
break;
} case 'comment': {
this.navController.push(CommentsPage, { id: data.notification.payload.additionalData.pid })
break;
}
}
}
更好的解决方案是重置当前导航堆栈并重新创建它。为什么?
让我们看看这个场景:
TodosPage(根页面)-> TodoPage(推送)-> CommentsPage(推送)
如果您直接转到 CommentsPage,"go back" 按钮将无法按预期工作(它消失了或将您重定向到...谁知道在哪里 :D)。
所以这是我的建议:
this.oneSignal.handleNotificationOpened().subscribe((data) => {
// Service to create new navigation stack
this.navigationService.createNav(data);
});
navigation.service.ts
import {Injectable} from '@angular/core';
import {App} from 'ionic-angular';
import {TodosPage} from '../pages/todos/todos';
import {TodoPage} from '../pages/todo/todo';
import {CommentsPage} from '../pages/comments/comments';
@Injectable()
export class NavigationService {
pagesToPush: Array<any>;
constructor(public app: App) {
}
// Function to create nav stack
createNav(data: any) {
this.pagesToPush = [];
// Customize for different push notifications
// Setting up navigation for new comments on TodoPage
if (data.notification.payload.additionalData.type === 'NEW_TODO_COMMENT') {
this.pagesToPush.push({
page: TodoPage,
params: {
todoId: data.notification.payload.additionalData.todoId
}
});
this.pagesToPush.push({
page: CommentsPage,
params: {
todoId: data.notification.payload.additionalData.todoId,
}
});
}
// We need to reset current stack
this.app.getRootNav().setRoot(TodosPage).then(() => {
// Inserts an array of components into the nav stack at the specified index
this.app.getRootNav().insertPages(this.app.getRootNav().length(), this.pagesToPush);
});
}
}
希望对您有所帮助:)