アプリに「LINEで送る」を実装する

f:id:yuichilo:20171118002858p:plain

こんな感じのボタンからメッセージをLINEアプリへダイレクトに送信します。

Webサイトに設置したい場合は、以下の公式サイトで確認できます。 media.line.me

今回は、OSの共有機能を利用するのでもなく、アプリから直接LINEを起動してメッセージを投稿する方法です。

実装のポイント

  • LINEのDeveloper登録は必要ない
    • SDKなどの導入も必要ありません
  • URL Schemeline:/msg/text)を利用する
    • line://msg/text/<message>の形式でURLを作成する
  • URLエンコードする
    • 日本語メッセージの送信には、URLを作成するためエンコードが必要です。
  • 改行コードを指定する
    • 受信した相手に見やすい表示にする
  • iOSでは送信メッセージの確認ができない
    • 送信前にメッセージの確認・編集ができないため、メッセージ内容には注意が必要です。

iOSの実装

Info.plistへの許可設定

iOS9からアプリ内で実行するURL SchemeをプロジェクトのInfo.plistに設定する必要があります。

Key: LSApplicationQueriesSchemes
value: (配列でURL Schemeを指定)

f:id:yuichilo:20171118000810p:plain:w600

URLの作成とopen

  • Swift 4.0
let urlscheme: String = "line://msg/text"
let message = "iPhone X\n\n私たちはずっと変わらないビジョンを持ち続けてきました。\nすべてがスクリーンのiPhoneを作ること。\n\nhttps://www.apple.com/jp/iphone-x/"

// line:/msg/text/(メッセージ)
let urlstring = urlscheme + "/" + message

// URLエンコード
guard let  encodedURL = urlstring.addingPercentEncoding(withAllowedCharacters: NSCharacterSet.urlQueryAllowed) else {
  return
}

// URL作成
guard let url = URL(string: encodedURL) else {
  return
}

if UIApplication.shared.canOpenURL(url) {
  if #available(iOS 10.0, *) {
    UIApplication.shared.open(url, options: [:], completionHandler: { (succes) in
      //  LINEアプリ表示成功
    })
  }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)
}
  • 改行コードは「\n」です
  • URLはエンコードします
  • openURLはiOS10からメソッドが異なります
  • 「LINE」アプリがインストールされていない場合を考慮します

画面遷移

アプリからURL Scheme実行 LINEアプリが起動して送信先選択 送信完了
f:id:yuichilo:20171118004232p:plain:w300 f:id:yuichilo:20171118004222j:plain:w300 f:id:yuichilo:20171118004227j:plain:w300

Androidの実装

URLの作成とStartActivity

  @Override
  public void onClick(View view) {

    // URL Scheme
    String urlScheme = "line://msg/text";
    // メッセージ
    String message = "iPhone X\n\n私たちはずっと変わらないビジョンを持ち続けてきました。\nすべてがスクリーンのiPhoneを作ること。\n\nhttps://www.apple.com/jp/iphone-x/";

    // メッセージをURLエンコード
    String encodedMsg = null;
    try {
      encodedMsg = URLEncoder.encode(message, "UTF-8");
    } catch (UnsupportedEncodingException e) {
      e.printStackTrace();
    }

    if (encodedMsg != null) {
      Uri uri = Uri.parse(urlScheme + "/" + encodedMsg);
      Intent i = new Intent(Intent.ACTION_VIEW,uri);
      startActivity(i);
    }
  }
  • LINEアプリのインストール有無はPackageManagerなどで事前にチェックする必要があります
  • 改行コードは「\n」です
  • URLはエンコードします

画面遷移

アプリからURL Scheme実行 LINEアプリが起動して送信先選択 送信メッセージの内容を確認可能 送信完了
f:id:yuichilo:20171118122512p:plain:w250 f:id:yuichilo:20171118122501p:plain:w250 f:id:yuichilo:20171118122507p:plain:w250 f:id:yuichilo:20171118122517p:plain:w250

デザイン

「LINEで送る」のボタン画像は公式のサイトでリソースを配布しています。 https://media.line.me/ja/how_to_install#lineitbutton

まとめ

今回利用したURLスキームは、ネット上の情報を利用して動作確認まで行えました。
しかし公式のURLスキーム情報にたどり着けなかっため、今後利用できなくなる可能性もあります。
ともあれ、Developer登録やSDKの導入なしで利用できるURLスキームで連携できるのは便利でした。