はじめに
Cordovaを利用してスマホアプリの開発を行う際、自分のアプリから別のアプリを起動したり、もしインストールされていないのであればアプリのインストールを促すべく、ストアに遷移させたい場面があると思います。個人的に、困ったところだったので詳しい方法をまとめてみました。
プラグインの追加
以下のプラグインを追加する必要があります。
・InAppBrowser
以下のコマンドでプラグインを追加できます。
$ cordova plugin add org.apache.cordova.inappbrowser
InAppBrowserは、iOSでAppStoreを開く際の以下の記述で必要になります。
window.open("[App StoreのURL]"), '_system', 'location=yes');
遷移のためのJavaScript
iOSとAndroidのそれぞれで方法が異なるため、OSごとに命令を分岐させる必要があります。
if (isAndroid)
launchAndroidApp();
else
launchiPhoneApp();
Androidの場合
function launchAndroidApp() {
window.plugins.webintent.startActivity({
action: window.plugins.webintent.ACTION_VIEW,
url: "[URLスキーム]://"},
function() {},
function() {
console.log('Failed to open App');
launchAndroidStore(appinfo);
}
);
}
function launchAndroidStore() {
window.plugins.webintent.startActivity({
action: window.plugins.webintent.ACTION_VIEW,
url: "market://details?id=[package名]")},
function() {},
function() {
console.log('Failed to open Store')
}
);
}
[URLスキーム] には、アプリ固有のURLを指定します。
URLスキームは一般に公開されていないことが多いため、以下のサイトを参考にするといいと思います。
http://www.thetheorier.com/index.html
[package名] については、Google Play StoreのURLのid以降となります。
(例) https://play.google.com/store/apps/details?id=net.muji.passport.android
例えば、「MUJI passport」アプリであれば、
[URLスキーム] = "mujipassport"
[package名] = "net.muji.passport.android"
となります。
iOSの場合
function launchiPhoneApp() {
document.location = "[URLスキーム]://";
var start = Date.now();
setTimeout(function(){
var diff = Date.now() - start;
if (diff < 400) {
window.open("[App StoreのURL]"), '_system', 'location=yes');
}
}, 300);
}
[URLスキーム] は、iOSとAndroid共通のことが多いです。
例えば、「MUJI passport」アプリであれば、
[URLスキーム] = "mujipassport"
[App StoreのURL] = "https://itunes.apple.com/jp/app/muji-passport/id631993791?l=ja&ls=1&mt=8"
となります。
最後に
私が個人的に収集した情報ですので、間違いや分かりづらいところがあればコメントしてください。
参考情報
http://iphone-dev.g.hatena.ne.jp/laiso/20120625/1340615723
https://cordova.apache.org/docs/ja/3.1.0/cordova/inappbrowser/inappbrowser.html