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

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

## はじめに
今まで
・[EngagementServiceを使いiOSデバイスでPush通知を送信 Part1](https://qiita.com/Kony_Team/items/2e5cafb73481bf4179e0)
・[Konyを使ってAndroidのPush通知を設定する方法](https://qiita.com/Kony_Team/items/b706fc7b7a7857eda520)
にてPush通知の使い方をご紹介してきましたが、今回はPush通知でよく遭遇するエラーについてまとめました。
是非参考になればと思います。

その他のエラーまとめについてはこちら:point_down_tone1:
・[Konyでよく遭遇するエラーまとめ　＊Kony Visualizer 起動〜開発編＊](https://qiita.com/Kony_Team/items/0667ca2c8ee346f046d7)
・[Konyでよく遭遇するエラーまとめ　＊Build編（共通）＊](https://qiita.com/Kony_Team/items/b706fc7b7a7857eda520)
・[Konyでよく遭遇するエラーまとめ　＊iOSでのBuild編＊](https://qiita.com/Kony_Team/items/2dbb66b34c05e09369f7)


## エラーまとめ
### エンゲージメントサービスの公開で失敗した時
Androidを例に説明します。
FabricにてEngagementServiceの設定を行った後に、Publishを実行した時に「AndroidGCM Cloud Connection Test failed.」ようなエラーが出ていた場合
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592264/e3cb604f-e73c-69ef-3fc8-794901b0ad08.png)
これは、Publish時にエンゲージメントサービスとFCMサーバ間で通信チェックをしているのですが、それに失敗したことを教えてくれています。

エンゲージメントサービスに設定している認証キーが誤っている可能性が高いので、改めて正しいキーであるかを確認しましょう。
FabricコンソールのEngagementタブにて、「FCM Authorization Key」の値と、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592264/9bd962e6-0df5-2b78-a9ed-61e1f0702a75.png)
Firebaseコンソールのプロジェクトの設定->Cloud Messagingにあるサーバーキーが一致しているかを確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592264/0995e03c-ac9f-24e0-c8ca-e0ff75820320.png)

正しく設定されていれば、再Publishに成功します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592264/e2a3cf4a-cb87-168d-b104-8dbfe4c973bb.png)

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

### Push通知の解除が出来ない場合
デバイスに対してプッシュ通知を登録する場合には、kony.push.registerファンクションを呼び出すということは[EngagementServiceを使いiOSデバイスでPush通知を送信 Part1](https://qiita.com/Kony_Team/items/2e5cafb73481bf4179e0)でもご紹介しましたが、
Push通知の解除にはkony.push.deRegisterファンクションを呼び出せば解除できます。
しかし、[公式](https://docs.kony.com/konylibrary/visualizer/viz_api_dev_guide/content/kony.push_functions.htm)のソースコードをコピーするとエラーが発生して解除が出来ませんでした。(2021年4月15日現在)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592264/6a0b9dbd-750b-5240-43d0-b1d2f6b6b6c8.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](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592264/407e6275-505d-182d-d635-2a0eaad2111d.png)
「プッシュ通知を登録」ボタンのonClick時にregistNotificationファンクションを実行する、
「プッシュ通知を解除」ボタンのonClick時にunregistNotificationファンクションを実行するように作りました。

Push通知を登録ボタンを押下し、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592264/b9a4390f-898c-bb5e-ea4d-a1af1e228581.png)
[Konyを使って特定のデバイスにPushの送信テストする方法](https://qiita.com/Kony_Team/items/a618f7897d38e4b610b7)を使ってPush通知を送ります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592264/641b9659-b827-17e7-694c-d54fd48b728e.png)

受け取ると画面上に受け取ったメッセージが表示されることが確認出来ます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592264/4de685be-292e-06ce-a925-2c27773707b0.png)
FabricエンゲージメントサービスコンソールでのSubscribers画面からもデバイスが登録されていることが確認出来ました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592264/6d8ca6ea-73b3-f2ef-6241-f5aee16eb4f7.png)
そのうえで、「プッシュ通知を解除」ボタンを押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592264/33035eb6-aae2-617d-5e66-a0bba9e8500c.png)

同じようにPush通知を送っても、メッセージが表示されなくなりました。
デバイスを確認すると、デバイスが無効化されていることがアイコンから分かるようになっています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592264/d67813fd-de83-b09f-2267-485762dd2242.png)

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

#### 参考
[EngagementServiceを使いiOSデバイスでPush通知を送信 Part1](https://qiita.com/Kony_Team/items/2e5cafb73481bf4179e0)
[Konyを使ってAndroidのPush通知を設定する方法](https://qiita.com/Kony_Team/items/b706fc7b7a7857eda520)
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