QRコードを読み取ってアプリが開く機能をKonyで作ってみたPart②


##目次
1. はじめに
2. 実装方法
3. まとめ



##はじめに
前回[こちらの記事](https://qiita.com/Kony_Team/items/d7a83958abd58c6c8083)で、deeplinkを使ってアプリを起動する方法についてご紹介しました。
今回は応用編として、リンクの値によって表示する画面を変える方法をご説明したいと思います！

会員登録が未登録のお客様には、新規登録画面にジャンプさせ、
登録済みのお客様にはログイン画面を表示するなど様々な使い方ができるので、
是非使ってみてくださいね！

##実装方法

では、早速実装方法についてご説明します。

###①画面を作成
QRに記載されている数字によって違う画面が表示されるようなアプリを作成したいので、
今回はわかりやすいように、
1の場合は、うさぎ
2の場合は、猫
3の場合は、犬の画面が表示されるように作成します。

それぞれ以下のように画面を作成しました。
![スクリーンショット 2020-09-28 11.21.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592264/99f778f1-31f2-2976-7a92-d91e0ffbd529.png)

frmDogはこのようになっています。
![dogimage.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592264/3b331014-37fe-66e8-e07f-cf0a846f1de2.png)


ここまでで画面の作成は終了です。
次に、QRから値を取得して、それぞれの値で画面遷移を行うための条件分けを記載していきます。

###②QRコードから値を取得・画面遷移
前回の記事で、KonyVisualizerでdeeplinkを設定すると、
リンクからアプリに遷移することができると説明しましたが、
リンクの末尾に値を付与することで、アプリ側でその値を取得して
値によって アプリの動きを制御できるようになります。

では、リンクに付与されている値を取得するために、以下のモジュールを作成します。
KonyVisualizerの左メニューに`Modules`があるので、右クリックして、
`New JS Module`を選択します。

![スクリーンショット 2020-09-28 11.42.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592264/42422cf8-c340-92d9-fe52-f4a1e455da72.png)

モジュールの画面が表示されたら以下のコードを貼り付けてください。

```CmnLogin.js
 const CmnLogin =function(){
    var ID = null;
    /**
     * @function
     *
     * @param eventobject 
     */
    const launchParams = function(eventobject){
      kony.print("#### launchParams :" + JSON.stringify(eventobject));
      //読み込んだQRの値によって表示する画面を変える
     if(eventobject.launchparams.ID == 1){
        var rabbit = new kony.mvc.Navigation("frmRabbit");
        rabbit.navigate();
      }else if(eventobject.launchparams.ID == 2){
        var cat = new kony.mvc.Navigation("frmCat");
        cat.navigate();
      }else if(eventobject.launchparams.ID == 3){
        var dog = new kony.mvc.Navigation("frmDog");
        dog.navigate();
      }else{
        return ;
      }
    };
   
    return{
      launchParams : launchParams,
    };
  }();
```
モジュールにコードを記述することによって、
ここで定義した関数がどこからでも呼び出せるようになります。

モジュールの作成が完了したら、
Mobileをクリックし、右メニューに以下のようなイベントが表示されますので、
App ServiceのEditをクリックしてイベントメニューを開いてください。
![スクリーンショット 2020-09-28 11.47.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592264/83c05d05-0a3e-9a8e-b883-fc5ccc88c37d.png)

App Serviceのイベントメニューで、
先ほど定義した関数を呼び出すことによって、QRに付与されている値を取得することが可能になります。
![スクリーンショット 2020-09-28 11.48.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592264/7f1fa10f-87b8-cd3f-b053-54cf8cf030d1.png)
※returnがないと関数が呼び出されないため、returnを忘れないようにしてください:warning:

〜補足〜
App Serviceイベントは、アプリと接続されているバックグラウンドサービスの起動を行う際に呼び出されるイベントです。
その他のイベントについては、以下のような場合に呼び出されます。

| イベント名 |内容 |
|:-----------|:------------|
|Pre Appinit|アプリが起動された後〜アプリが読み込まれる前に呼び出されるイベント|
|Post Appinit|アプリが読み込まれた後〜データが表示される前に呼び出されるイベント|
|App Service|アプリと接続されているバックグラウンドサービスの起動を行う際に呼び出されるイベント|
|Deeplink|3rd Partyアプリとブラウザアプリがあなたのアプリに接続できるようにするリンクを作成することを指します。|

ここまでで、実装は完了です！

早速QRリンクを変化させて、アプリの動きをみてみましょう:sunny:
<blockquote class="twitter-tweet"><p lang="und" dir="ltr"><a href="https://t.co/g9BbwBDAEz">pic.twitter.com/g9BbwBDAEz</a></p>&mdash; Kony (@Kony12763790) <a href="https://twitter.com/Kony12763790/status/1310752766453665792?ref_src=twsrc%5Etfw">September 29, 2020</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>


QRの値がそれぞれ
1の場合は、:rabbit:うさぎ
2の場合は、:cat:ねこ
3の場合は、:dog:いぬ
の画面が表示されていることがわかりますね！


また、デバッグログを見てみると、
launchparamsの中に`URL`と`ID`の値が取得できていることがわかります。

```
//ID=2のQRを読み取った場合
 #### launchParams :{"launchparams":{"URL":"imageuploader://test?ID=2","ID":"2"},"launchmode":3}
```

今回は、猫や犬の画面を表示する簡単なものでしたが、
実際これらを利用する場合は、
アプリを既にダウンロードしている人には、アプリのログイン画面に遷移させる
まだダウンロードしていない人には、App Storeのダウンロード画面を表示させる等
様々な使い方ができますので、是非活用してみてくださいね！

##まとめ
この機能はよく使うのですが、個人的にApp Serviceにイベントを設定し忘れたり、
returnを書き忘れることがちょくちょくあるので、みなさんは忘れないよう気をつけてくださいね:bow_tone1:


##参考
[App Lifecycle Events](https://docs.kony.com/konylibrary/visualizer/viz_app_viewer/Content/ExecuteChildAppEvents.htm)
[App Service Event](https://docs.kony.com/konylibrary/visualizer/visualizer_user_guide/Content/AppServiceEvent.htm)