15
15

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

URLスキームの使い方 LINEアプリでiOS(Swift)とAndroid(Java)

Posted at

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@android.gif

なので、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)


line@ios.gif

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を作る場合は、いじる必要があります。)

参考

15
15
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
15
15

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?