URLスキームを使うことで、アクテビティ状態のアプリを別アプリへ飛ばすことが出来ます。今回はLINEを利用した書き方について説明していきます。
例えばLINEでメッセージを送ったり、カメラを起動することができます。LINE MESSAGE APIの仕様についてはこちらを参考ください。
環境
Mac:Sierra 10.12.6
Swift 4.0
Xcode 9.2
Android Studio 2.3
前提
カスタムURLスキームとUniversal linksについて
LINEのMessage APIについての公式ドキュメントに記載しているとおり、別のアプリケーションからLINEを開くには指定のURLを使うんですが、**line://かhttps://line.me/R/ **の2通りあります。前者がカスタムURLスキームを使うもので、後者がUniversal linksを使ったものになります。
どちらのURLでもすでに特定のアプリ(今回ではLINE)がインストール済みの場合は、アプリが開く挙動は変わらないのですが、インストール済みではない場合に挙動が変わってきます。
- line:// ▶何もおきないか、エラーページが開く
- https://line.me/R/ ▶Webブラウザが開き、LINEアプリのダウンロードを求めるページが開く
なので、line://のようなカスタムURLスキームを利用する場合は、開けなかった時、つまりはアプリをインストールしていないときの挙動を設定しないと、ユーザーにとって「あれ?何も起こらない」みたいになりかねません。
LINE@のリンク
自分のアカウントの友達追加をするには、自分のアカウントのURLを知る必要があります。こちらの③友達追加URLに説明が載っています。
簡単に書くと、メニューの友だち画面▶URLを共有、で出来ます。
iOSの実装方法
Info.plistにScheme登録
Info.plistにLSApplicationQueriesSchemes
というキーでTypeをArrayにし、そこにアイテムを追加し、TypeをStringでvalueをlineにします。
これを設定しないと、指定したアプリがインストール済みでもエラーになります。これは、Appleがユーザーの他のアプリ情報をプライバシー対象としたためです。そのため、アプリに関係ない別アプリのインストール情報を調べることは出来ません。
コード
下記のようになります。
実装上注意するのは、urlを開くメソッドopenURLがiOS10以降で非推奨となったため、10以降ではopenを使います。
また、URLスキームを利用する場合は、インストール済みではない場合の処理も書くようにしましょう。
// let urlscheme = "https://line.me/R/ti/p/hoghoge" // Universal links
let urlscheme = "line://ti/p/hoghoge" //カスタムURLスキーム
// URL作成
guard let url = URL(string: urlscheme) else {
return
}
if UIApplication.shared.canOpenURL(url) {
if #available(iOS 10.0, *) {
UIApplication.shared.open(url, options: [:], completionHandler: { (succes) in
})
}else{
UIApplication.shared.openURL(url)
}
}else {
// LINEアプリが無い場合
let alertController = UIAlertController(title: "エラー",
message: "LINEがインストールされていません",
preferredStyle: UIAlertControllerStyle.alert)
alertController.addAction(UIAlertAction(title: "OK", style: UIAlertActionStyle.default))
present(alertController,animated: true,completion: nil)
Androidの実装方法
コード(https/httpの場合)
単純にURIを叩くだけで可能です。
今回はtextViewをタッチすると開くようにしました。
String uri = "https://line.me.R/"
textView.setAutoLinkMask(Linkify.ALL);
textView.setText(uri);
コード(スキーム名を使う場合)
Intentを使います。
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse("line://"));startActivity(intent);
Androidのほうは、ManifestファイルをいじらなくてもOKです。(自作でカスタムURLを作る場合は、いじる必要があります。)