URLスキームによる別アプリの起動ができない
解決済
回答 2
投稿
- 評価
- クリップ 1
- VIEW 3,107
Monacaでアプリを作成しています。(iPad mini)
また、Objective-Cでも、アプリを作成しています。
※MonacaアプリをAアプリ、Objective-CアプリをBアプリとします。
両アプリとも、業務アプリのため、一般公開する予定はありません。
Aアプリ、Bアプリとも、1つのiPadにインストールします。
URLスキームを使って、AアプリからBアプリを起動したいのですが
起動できずに困っております。
(文献を探せませんでした)
Bアプリには、 URLスキームを設定しました。
infoの「URL Types」の
「URL Schemes」に「testprint」、
「Role」はとりあえず「Editor」のままで設定しました。
Aアプリには、Bアプリを起動するため、ボタンクリックのイベント内に、
「javascript:location.href = "testprint:///";」と記述しました。
とにかく起動したいのですが、BアプリがAアプリから起動することができません。
(この時点で、記述方法があっているのかどうかも怪しいのですが・・・)
試したこと
Aアプリに、ボタンのイベントではなく、
<a href="testprint:///">テスト</a>
と記述して、アンカーをタップしてみましたが、起動できませんでした。
URLをメモ帳(<a href="mobilenotes:///">)にして、メモ帳が起動できるか確認しましたがこれは起動できました。
ちなみに、iPadのメモ帳に、「testprint:///」と記述して、Bアプリが起動できるか確認しましたが、Bアプリは起動することができました。
正しい記述方法を教えていただけますでしょうか?
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 過去に投稿した質問と同じ内容の質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
check解決した方法
0
業務アプリで、納期も迫っていたこともあったため、アシアル様(Monacaの運営会社)へ質問して、
回避策をいただきましたので、ご紹介します。
※アシアル様に、teratailへ記載してもいいと許可もらいました。
以下、いただいた回避策を抜粋して記載します。
iOS 9以降では、アプリ内からURLスキームを利用して他のアプリを起動させる場合は、
ネイティブ側の機能が必要になるため、アプリ内のHTMLタグからのURL指定で、他のアプリを起動させることはできません。
(私の場合、iOS 10.3のため、起動不可ということになりました。)
以下、回避策1,2共に、URLスキームが「myapp」とします。
■回避策1:config.xmlに下記の設定を行うことで、aタグから指定したカスタムURLのアプリを起動する
★この設定はMonacaデバッガーでは、確認することはできません。
ビルドを行い、実機にて確認していただく必要があります。
・使用例:
<a href="myapp://">Call URLScheme</>
config.xmlの「widget」タグ配下に、下記を追加します。
<platform name="ios">
<config-file target="*-Info.plist" parent="LSApplicationQueriesSchemes">
<array>
<string>myapp</string>
</array>
</config-file>
</platform>
config.xmlを編集した場合、記述内容によっては、アプリが正常に動作しなくなる場合がございますので、ご注意ください。
(私的には万が一に備え、編集前にバックアップを取ることをお勧めします。)
余談ですが、configに記載した内容は、
Objective-Cで作成したアプリの場合のURLスキーム起動だと、info.plistに設定する内容と同じになるのでは?と思います。(たぶん)
■回避策2:「InAppBrowser」プラグインを利用し、「target」を「_system」に設定することで、システムブラウザーを起動する
iOS端末の場合は、Safariが起動いたしますので、システムブラウザーに「カスタムURL」を渡すことで、
カスタムURLのアプリを起動させることを確認しております。
・使用例:
<a href="#" onclick="callURLScheme();">Call URLScheme</>
function callURLScheme() {
window.open = cordova.InAppBrowser.open;
window.open("myapp://", "_system", 'location=yes');
}
・InAppBrowser プラグイン(Monacaのドキュメント)
https://docs.monaca.io/ja/reference/cordova_6.5/inappbrowser/
デバッガーでも動作を確認することができます。
但し、この場合、システムブラウザー(Safari)を利用することで回避しているので、
今後、もし、Apple側の仕様で、Safariから利用できなくなった場合には、回避策2は利用できなくなるとのことでした。
両回避策とも、URLスキームでのアプリ起動が出来ました。
都度、ビルドするのも手間だったので、回避策2でデバッガーから起動等を確認しつつ、
最終的には、回避策1でビルドし実機へ搭載して確認する、という方法を採る予定です。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
0
ヒントになるかどうか分かりませんが、Monacaデバッガー等でログの確認は行っておられますか?
Monacaで開発したアプリはブラウザで動作しているようなものですので、セキュリティ的に他のアプリが起動できないような制御がかかっているかもしれません。
起動側(Aアプリ)に対し、Bアプリは安全なので起動しても良いというようなことを明示してやる可能性がある、かもしれません。
もし「起動しようとはするがセキュリティ関連の制御で起動できない」という状況なのであれば、何かしらのメッセージがコンソールログに表示されているはずです。
Androidであればこういったプラグインもありますが、iOSはセキュリティ関連が結構厳しいということも耳にします。
まずは問題点の把握が必要、もしセキュリティ関連の問題だということが判明すれば次のステップに進めると思い回答しました。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 88.23%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる