Cordova で Repro とカスタム URL スキームを使ってディープリンクを扱う
はじめに
Cordova で Repro とカスタム URL スキームを使ってディープリンクを扱う方法。
TL;DR
- EddyVerbruggen/Custom-URL-scheme をインストール
- Content Security Policy の設定変更
config.xml
変更(allow-intent
,config-file
追加)window.handleOpenURL
を定義
- ディープリンクを設定して Repro プッシュ通知を送信
目次
環境・条件
1 | $ sw_vers |
動作確認端末
- iPhone 11 Pro (iOS 14.4)
- Huawei nova lite2 (Android 9)
詳細
Repro のプッシュ通知でディープリンクを使う方法はドキュメント通りなので、カスタム URL スキーム の設定がほぼすべて。
カスタム URL スキーム
EddyVerbruggen/Custom-URL-scheme を使う。
インストール
EddyVerbruggen/Custom-URL-scheme インストール。
インストール時に --variable URL_SCHEME=<YOUR_SCHEME>
でカスタム URL スキームを指定する。なお、ハイフン(-
)、大文字、2単語以上、既に使われているものなどは指定不可。
1 | # ハイフン(-) は使えない: my-scheme -> NG, myscheme -> OK |
index.html
修正
参考: javascript - Using handleOpenURL with Custom URL scheme in Cordova - Stack Overflow
index.html
を修正。
Content-Security-Policy にカスタム URL スキームを追加、今回は mycoolapp:
の記述を追加。
1 | <meta |
config.xml
修正
参考:
- javascript - Using handleOpenURL with Custom URL scheme in Cordova - Stack Overflow
- This plugin no longer works on cordova-android >=7. Fixable in one line, pls do it. · Issue #294 · EddyVerbruggen/Custom-URL-scheme
allow-intent
, platform name="android"
配下に config-file
(intent-filter
を追加する設定)を追加。
1 |
|
JS 修正
参考:
If you want to alert the URL for testing the plugin, at least on iOS you need to wrap it in a timeout like this:
[Google翻訳] プラグインをテストするためにURLにアラートを送信する場合は、少なくともiOSでは、次のようなタイムアウトでプラグインをラップする必要があります。
README にも書かれている通り、iOS で alert
を出す場合は setTimeout
を使う必要がある。
自分は Cordova + Vue を使っており src/main.js
を修正した。以下は alert
を表示する例だが、「指定のページを表示させたい」とか「特定の処理を行いたい」とかを url
(ディープリンク) の内容をもとに実装すれば OK。
1 | import Vue from 'vue'; |
Repro プッシュ通知設定
事前準備
以下を参考に行う。本記事では省略。
- プッシュ通知(
/dashboard/campaign/push-notification.html
) — Repro ドキュメント - プッシュ通知(
/dev/sdk/push-notification/index.html
) — Repro ドキュメント
ディープリンク
参考:
Web から設定する場合は以下のように設定する。
API を使う場合は「スタンダード形式でdeeplink_url
を設定」すれば良い。
1 | { |
動作確認
画像など省略。
ここまでの設定で iOS/Android ともに「Repro でプッシュ通知を受信して、
ハマったところ
Android でカスタム URL スキームを開けない
参考:
- This plugin no longer works on cordova-android >=7. Fixable in one line, pls do it. · Issue #294
- Path fix for Codova Android 7.0 · bytelabsco/Custom-URL-scheme@6e39323
上記 Issue にもある通り cordova-android v7 以降だと上手く動かないっぽい、自分は cordova-android v9.0.0 でダメだった。(「簡単になおせるよ」と言われてなぜかずっと取り込まれていない。。。)
フォーク先ではプラグインに手を入れている(当たり前)が、プラグインは修正したくないので前述の通り config.xml
を修正した。
1 |
|
まとめ
- EddyVerbruggen/Custom-URL-scheme をインストール
- Content Security Policy の設定変更
config.xml
変更(allow-intent
,config-file
追加)window.handleOpenURL
を定義
- ディープリンクを設定して Repro プッシュ通知を送信
参考文献
- EddyVerbruggen/Custom-URL-scheme
- Config.xml - Apache Cordova
- Plugin.xml reference documentation - Apache Cordova
- javascript - Using handleOpenURL with Custom URL scheme in Cordova - Stack Overflow
- This plugin no longer works on cordova-android >=7. Fixable in one line, pls do it. · Issue #294 · EddyVerbruggen/Custom-URL-scheme
- プッシュ通知(
/dashboard/campaign/push-notification.html
) — Repro ドキュメント - プッシュ通知(
/dev/sdk/push-notification/index.html
) — Repro ドキュメント - プッシュAPI — Repro ドキュメント
- Path fix for Codova Android 7.0 · bytelabsco/Custom-URL-scheme@6e39323
- MonacaアプリでカスタムURLスキーマを実装する | モナカプレス
- 【Cordovaアプリ開発】プラグイン Custom-URL-scheme利用方法まとめ · Elastic Tech Days
- CordovaでカスタムURLスキームに対応する方法 - 備忘録
関連記事
- Cordova アプリに Twitter Timeline の埋め込み
- Cordova でアプリ名やアプリのバージョン情報などを取得
- Cordova で端末やエミュレータを指定してデプロイする
- Cordova iOS アプリで長押し(ロングタップ, ロングプレス)によるコンテキストメニューを無効化
- Cordova Android で iframe 内のリンクをシステムデフォルトブラウザで開く方法
- Cordova で Splash Screen を設定する cordova-plugin-splashscreen
- JavaScript で URL のクエリパラメータを操作する方法
- jQuery Select2 で、初期値の設定と選択状態のクリア