イオン2の内容にpush notification
の内容をアクセスし、通知が届いたらコード束を実行できますか?event fire
?firebaseプッシュ通知コンテンツを読み、ionic2でメソッドを起動するにはどうすればいいですか?
答えて
代わりにcordova-plugin-firebaseを使用することをおすすめします。このプラグインの使い方については、this repoをご覧ください。
最初にfirebaseコンソールを設定し、.json/.plistファイルをdonwloadして、それらをIonicアプリのルートフォルダに追加する必要があることに注意してください。次に、プラグインの使用を開始できます。
デモではすべてがapp.component.ts
ファイルで行われますが、すべてを整理しておくためにPushNotificationService
を作成することをおすすめします。
トピック機能を使用しているため、デバイスで特定のトピックを購読できます。これらのトピックを使用して、一部のユーザーグループ(AndroidやiOS、特定のユーザーのみ、アプリからのすべてのユーザー...):
this.firebase.subscribe('firebase-app'), // Subscribe to the entire app
this.firebase.subscribe('android'), // Subscribe to android users topic
this.firebase.subscribe('userid-1') // Subscribe using the user id (hardcoded in this example)
これは、すべての関連するコードです:
// Angular
import { Component } from '@angular/core';
// Ionic
import { Platform, AlertController } from 'ionic-angular';
// Ionic Native
import { Firebase } from '@ionic-native/firebase';
import { StatusBar } from '@ionic-native/status-bar';
import { SplashScreen } from '@ionic-native/splash-screen';
// Pages
import { HomePage } from '../pages/home/home';
export class NotificationModel {
public body: string;
public title: string;
public tap: boolean
}
@Component({
templateUrl: 'app.html'
})
export class MyApp {
rootPage: any = HomePage;
constructor(private platform: Platform,
private alertCtrl: AlertController,
private firebase: Firebase,
private statusBar: StatusBar,
private splashScreen: SplashScreen) {
this.platform.ready().then(() => {
this.statusBar.styleDefault();
this.splashScreen.hide();
if (this.platform.is('cordova')) {
// Initialize push notification feature
this.platform.is('android') ? this.initializeFireBaseAndroid() : this.initializeFireBaseIos();
} else {
console.log('Push notifications are not enabled since this is not a real device');
}
});
}
private initializeFireBaseAndroid(): Promise<any> {
return this.firebase.getToken()
.catch(error => console.error('Error getting token', error))
.then(token => {
console.log(`The token is ${token}`);
Promise.all([
this.firebase.subscribe('firebase-app'), // Subscribe to the entire app
this.firebase.subscribe('android'), // Subscribe to android users topic
this.firebase.subscribe('userid-1') // Subscribe using the user id (hardcoded in this example)
]).then((result) => {
if (result[0]) console.log(`Subscribed to FirebaseDemo`);
if (result[1]) console.log(`Subscribed to Android`);
if (result[2]) console.log(`Subscribed as User`);
this.subscribeToPushNotificationEvents();
});
});
}
private initializeFireBaseIos(): Promise<any> {
return this.firebase.grantPermission()
.catch(error => console.error('Error getting permission', error))
.then(() => {
this.firebase.getToken()
.catch(error => console.error('Error getting token', error))
.then(token => {
console.log(`The token is ${token}`);
Promise.all([
this.firebase.subscribe('firebase-app'),
this.firebase.subscribe('ios'),
this.firebase.subscribe('userid-2')
]).then((result) => {
if (result[0]) console.log(`Subscribed to FirebaseDemo`);
if (result[1]) console.log(`Subscribed to iOS`);
if (result[2]) console.log(`Subscribed as User`);
this.subscribeToPushNotificationEvents();
});
});
})
}
private saveToken(token: any): Promise<any> {
// Send the token to the server
console.log('Sending token to the server...');
return Promise.resolve(true);
}
private subscribeToPushNotificationEvents(): void {
// Handle token refresh
this.firebase.onTokenRefresh().subscribe(
token => {
console.log(`The new token is ${token}`);
this.saveToken(token);
},
error => {
console.error('Error refreshing token', error);
});
// Handle incoming notifications
this.firebase.onNotificationOpen().subscribe(
(notification: NotificationModel) => {
!notification.tap
? console.log('The user was using the app when the notification arrived...')
: console.log('The app was closed when the notification arrived...');
let notificationAlert = this.alertCtrl.create({
title: notification.title,
message: notification.body,
buttons: ['Ok']
});
notificationAlert.present();
},
error => {
console.error('Error getting the notification', error);
});
}
}
もしてくださいをNotIアプリケーションがフォアグラウンドで実行されている場合や、通知が届いたときにアプリが終了した場合に送信される通知の内容が同じではないことを確認してください。通知を送信する際に、これを処理するためには、詳細オプションセクション私はFCMに休閑エラーインストール
はい、これにはプラグインが必要ですが、私はcordova-plugin-fcmを使用します。で
ごapp.ts
あなたはあなたのコードをやる以下
declare var FCMPlugin: any; //declare with the imports
FCMPlugin.onNotification(function(data){
if(data.wasTapped){
//Notification was received on device tray and tapped by the user.
alert(JSON.stringify(data));
}else{
//Notification was received in foreground. Maybe the user needs to be notified.
alert(JSON.stringify(data));
}
});
の中にあったタッパーを行うことができます。
これが役に立ちます。
でtitle
とbody
追加:モジュール「"E:/アプリケーション/ myappのを/ node_modules/ionic-native/dist/es5/index "にエクスポートされたメンバー 'FCM'がありません。 –
RSA
こんにちは@sebaferrerasは、アプリがフォアグランドにあり、通知がアプリクラッシュ(シングルデバイスとセグメンテーションユーザーの両方)に到着したときにアプリケーションがバックグラウンドでエラーなく受信したときに、実際にcordova-plugin-firebaseを使用しようとしました。私は問題のプロセスの完全な説明があります:https://forum.ionicframework.com/t/when-app-receive-push-notification-by-token-the-app-crashing/89893 – RSA
その投稿を見ると、私はそれを答えの中のように正確に使用しており、期待どおりに動作しているので、通知を処理するときに何か間違っているはずです。 Btw、あなたは、アプリケーションが閉じられたとき、 'title'と' body'プロパティはfirebase /プラグインによって送信されていないことに気付きましたか?そのため、このコードアプリケーションを使用するとカスタムデータ – sebaferreras
の情報を送信するのはなぜですか。クラッシュしませんが、このコードが無効になっていると、パブリックとシングルデバイスのプッシュ通知の両方でアプリがクラッシュします。 Tnx – RSA