前提・実現したいこと
Ionic5 cordova を使用して、iOSにプッシュ通知を送信するため、スマートフォンのAPNsトークンを取得する処理を作成しています。プラグインは、cordova-plugin-fcm-with-dependecy-updatedを使用しています。プッシュ通知のパーミッション(許可する・許可しない)を表示し、「許可する」が選択された場合にgetAPNSToken()メソッドによりAPNsトークンを取得しています。
発生している問題・エラーメッセージ
プッシュ通知のパーミッションが許可されたのち、一定時間経過する(1秒後でテスト)までは正常にAPNsトークンが取得可能なのですが、一定時間経過した後(30秒後でテスト)では取得不可能になっていました。また、アプリ上ではパーミッションを許可せず、iPhoneの設定から許可を行ってアプリ起動後、getAPNSToken()メソッドを実行してみましたが、取得不可能でした。
cordova-plugin-fcm-with-dependecy-updatedプラグインでは、「初回のパーミッション許可を行ってから数秒?後」しかAPNsトークンを取得することができないのでしょうか?このプラグインに拘っているわけではないので、もし他に使用できそうなプラグインがあれば、教えていただきたいです。よろしくお願い致します。
該当のソースコード
typescript
1import { Injectable } from '@angular/core'; 2import { Platform } from '@ionic/angular'; 3import { FCM } from '@ionic-native/fcm/ngx'; 4import { StorageService } from '../storage/storage.service'; 5import { FinalStatic } from 'src/entities/FinalStatic'; 6 7const w: any = window; 8 9@Injectable({ 10 providedIn: 'root' 11}) 12export class TokenService { 13 14 constructor(private platform: Platform, private fcm: FCM, private storage: StorageService) { 15/** 16 * デバイストークン を取得する処理 17 */ 18 registDeviceToken() { 19 return new Promise<any>((resolve, reject) => { 20 if(this.platform.is("ios")) { 21 this.fcm.hasPermission().then((isPermitted) => { 22 // プッシュ通知のパーミッションの有無確認 23 if(isPermitted) { 24 // パーミッション有り 25 // デバイストークン(apnsトークン)を取得する 26 this.fcm.getAPNSToken().then((token) => { 27 console.log("トークン取得:"); 28 console.log(token); 29 resolve(); 30 }); 31 } else { 32 // パーミッション無し 33 w.FCMPlugin.requestPushPermissionIOS(() => { 34 var sleep = time => new Promise(resolve => setTimeout(resolve, time)); 35 (async () => { 36 // 1秒間だけ待つ 37 // 理由: パーミッション判定直後にトークンを取得しても、nullになってしまうため 38 await sleep(1000); 39 // デバイストークン(apnsトークン)を取得する 40 this.fcm.getAPNSToken().then((token) => { 41 console.log("apns取得:"); 42 console.log(token); 43 resolve(); 44 }); 45 })(); 46 },(e) => { 47 console.log('push permissions fail', e); 48 }); 49 } 50 }); 51 } 52 }); 53 } 54
試したこと
上記ソースコードを、iOS13.2の実機上で実行しました。
補足情報(FW/ツールのバージョンなど)
$ ionic info Ionic: Ionic CLI : 5.4.16 Ionic Framework : @ionic/angular 5.0.7 @angular-devkit/build-angular : 0.803.26 @angular-devkit/schematics : 8.3.26 @angular/cli : 8.3.26 @ionic/angular-toolkit : 2.2.0 Cordova: Cordova CLI : 9.0.0 (cordova-lib@9.0.1) Cordova Platforms : android 8.1.0, ios 5.1.1 Cordova Plugins : cordova-plugin-ionic-keyboard 2.2.0, cordova-plugin-ionic-webview 4.1.3, (and 18 other plugins) Utility: cordova-res : 0.14.0 native-run (update available: 1.0.0) : 0.3.0 System: ios-deploy : 1.10.0 ios-sim : 8.0.2 NodeJS : v11.3.0 npm : 6.4.1 OS : macOS Catalina Xcode : Xcode 11.3 Build version 11C29
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。