0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Konyでよく遭遇するエラーまとめ *Push通知編*

Last updated at Posted at 2021-06-10

目次

  1. はじめに
  2. エラーまとめ
  3. 最後に

はじめに

今まで
EngagementServiceを使いiOSデバイスでPush通知を送信 Part1
Konyを使ってAndroidのPush通知を設定する方法
にてPush通知の使い方をご紹介してきましたが、今回はPush通知でよく遭遇するエラーについてまとめました。
是非参考になればと思います。

その他のエラーまとめについてはこちら:point_down_tone1:
Konyでよく遭遇するエラーまとめ *Kony Visualizer 起動〜開発編*
Konyでよく遭遇するエラーまとめ *Build編(共通)*
Konyでよく遭遇するエラーまとめ *iOSでのBuild編*

エラーまとめ

エンゲージメントサービスの公開で失敗した時

Androidを例に説明します。
FabricにてEngagementServiceの設定を行った後に、Publishを実行した時に「AndroidGCM Cloud Connection Test failed.」ようなエラーが出ていた場合
image.png
これは、Publish時にエンゲージメントサービスとFCMサーバ間で通信チェックをしているのですが、それに失敗したことを教えてくれています。

エンゲージメントサービスに設定している認証キーが誤っている可能性が高いので、改めて正しいキーであるかを確認しましょう。
FabricコンソールのEngagementタブにて、「FCM Authorization Key」の値と、
image.png
Firebaseコンソールのプロジェクトの設定->Cloud Messagingにあるサーバーキーが一致しているかを確認します。
image.png

正しく設定されていれば、再Publishに成功します。
image.png

iOSの場合も以下を観点にエンゲージメントサービスの設定値を見直してみてください。
・Push通知証明書であるp12ファイルの有効期限が過ぎていないか
・p12ファイル作成時のパスワードに誤りがないか
・選択したp12ファイルが正しいものか
・生成時のプッシュ通知のモードが「Production」「Development」の指定があっているか

Push通知の解除が出来ない場合

デバイスに対してプッシュ通知を登録する場合には、kony.push.registerファンクションを呼び出すということはEngagementServiceを使いiOSデバイスでPush通知を送信 Part1でもご紹介しましたが、
Push通知の解除にはkony.push.deRegisterファンクションを呼び出せば解除できます。
しかし、公式のソースコードをコピーするとエラーが発生して解除が出来ませんでした。(2021年4月15日現在)
image.png

こちらについては、kony.push.deRegister(new Hash());ではなく、kony.push.deRegister({});にすれば正しく動作することを確認できました。

以下サンプルアプリのご紹介です。Controllerのソースコードは以下の通り。

NotificationPageController.js
define({
    // プッシュ通知を登録
    registNotification:function(){
      let config;
      //#ifdef iphone
      config = [0, 1, 2];
      //#endif
      //#ifdef android
      config = {
        senderid: "Firebaseで取得したsenderID"
      };
      //#endif
      kony.push.register(config); 
      let callbacks = {
        onsuccessfulregistration: this.onSuccessfulRegistration.bind(this),
        onfailureregistration: this.errorHandling.bind(this),
        onlinenotification: this.receiveNotification.bind(this),
        offlinenotification: this.receiveNotificationBackground.bind(this),
        onsuccessfulderegistration: this.onSuccessfulDeregistration.bind(this),
        onfailurederegistration: this.errorHandling
      };
  	  kony.push.setCallbacks(callbacks);
    },
    // プッシュ通知サーバへの登録に成功した場合の後処理
    onSuccessfulRegistration:function(identifier){
      try{
        // Fabric側のエンゲージメントサービスにプッシュ通知情報を登録
        var serviceParameter = {};
        serviceParameter.osType = kony.os.deviceInfo().name.toLowerCase();
        serviceParameter.deviceID = kony.os.deviceInfo().deviceid;
        serviceParameter.sID = identifier;
        var messageClient = KNYMobileFabric.getMessagingService();
        messageClient.register(
          serviceParameter.osType, 
          serviceParameter.deviceID, 
          serviceParameter.sID, 
          '', // ユーザIDは今回登録しないので空文字に設定
          function(results){
            this.view.lblNotificationTitle.text='通知サービスに登録しました';
            this.view.lblNotificationInfo.text='';
          }.bind(this),
          function(error) {
            this.errorHandling(error);
          }.bind(this)
        );
      }catch(e){
        this.errorHandling(e);
      }
    },
    // プッシュ通知を解除
    unregistNotification:function(){
      try{
        var messageClient = KNYMobileFabric.getMessagingService();
        messageClient.unregister(function(){
          kony.push.deRegister({});
        },this.errorHandling);
      }catch(e){
        this.errorHandling(e);
      }
    },
    // プッシュ通知登録解除成功時
    onSuccessfulDeregistration:function(){
      this.view.lblNotificationTitle.text='通知サービスの登録を解除しました';
      this.view.lblNotificationInfo.text='';
    },
    // プッシュ通知を受け取った時(アプリを開いている時)
    receiveNotification:function(payload){
      this.view.lblNotificationTitle.text='プッシュ通知を受け取りました!';
      this.view.lblNotificationInfo.text = payload.message;
    },
    // プッシュ通知を受け取った時(アプリを閉じている時)
    receiveNotificationBackground:function(payload){
      var x = new kony.mvc.Navigation("NotificationPage");
      x.navigate();
      this.view.lblNotificationTitle.text='プッシュ通知を受け取りました!';
      this.view.lblNotificationInfo.text = payload.message;
    },
    // エラー共通処理
    errorHandling:function(error){
      commonError = error.message;
      var x = new kony.mvc.Navigation("ErrorPage");
      x.navigate();
    }
 });

画面はこちら
image.png
「プッシュ通知を登録」ボタンのonClick時にregistNotificationファンクションを実行する、
「プッシュ通知を解除」ボタンのonClick時にunregistNotificationファンクションを実行するように作りました。

Push通知を登録ボタンを押下し、
image.png
Konyを使って特定のデバイスにPushの送信テストする方法を使ってPush通知を送ります。
image.png

受け取ると画面上に受け取ったメッセージが表示されることが確認出来ます。
image.png
FabricエンゲージメントサービスコンソールでのSubscribers画面からもデバイスが登録されていることが確認出来ました。
image.png
そのうえで、「プッシュ通知を解除」ボタンを押下します。
image.png

同じようにPush通知を送っても、メッセージが表示されなくなりました。
デバイスを確認すると、デバイスが無効化されていることがアイコンから分かるようになっています。
image.png

最後に

Push通知は設定するまでの手順が多いので、設定誤りによってメッセージが受け取れないという問題が起こりやすいです。
ぜひ今までの記事も参考にしてみてくださいね。:grin:

参考

EngagementServiceを使いiOSデバイスでPush通知を送信 Part1
Konyを使ってAndroidのPush通知を設定する方法
https://docs.kony.com/konylibrary/visualizer/viz_api_dev_guide/content/kony.push_functions.htm
https://docs.kony.com/konylibrary/visualizer/viz_api_dev_guide/content/push_notifications.htm

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?