# ユニバーサルリンクを利用する
Appleのユニバーサルリンク (opens new window)機能を使ってアプリのセキュリティを高めることができます。ユニバーサルリンクを設定すると、LINEにより、まずユニバーサルリンクを使ってアプリの起動が試行されます。ユニバーサルリンクが無効な場合は、iOSバンドルIDに基づいたURLがフォールバックとして使用されます(詳しくは、「アプリをチャネルにリンクする」を参照してください)。
ユニバーサルリンク機能の有効化は必須ではありませんが、アプリケーションの安全性を高めるため使用することを推奨します。
ユーザーにユニバーサルリンクを使ってアプリを起動させるには、以下の手順に従います。
- アプリとサーバーを関連づける。
- LINE Developersコンソールでユニバーサルリンクを設定する。
- ユニバーサルリンクを指定して
LoginManager.setup
メソッドを呼び出す。 - ユニバーサルリンクでアプリが起動した後でログイン結果を制御する。
# 1. アプリとサーバーを関連づける
この手順については、Appleの「Allowing Apps and Websites to Link to Your Content (opens new window)」を参照してください。
以下の作業を完了します。
- アプリで制御するURLのJSONデータを含む
apple-app-site-association
ファイルを作成して、HTTPSサーバーに配置する。 - Associated Domainsのエンタイトルメントをアプリに追加する。
このセクションは、LINEの認可レスポンスを制御するためのユニバーサルリンクがhttps://yourdomain.com/line-auth/
であることを前提とします。
apple-app-site-association
ファイルのpaths
フィールドに/line-auth/*
を含めます。有効なapple-app-site-association
ファイルは以下のようになります。
{
"applinks": {
"apps": [],
"details": [
{
"appID": "YOUR_TEAM_ID.com.yourcompany.yourapp",
"paths": [ "/line-auth/*" ]
}
]
}
}
ユニバーサルリンクは実際のiOSデバイスでのみテストできることに注意してください。アプリのIDとプロファイルを正しく設定する必要があります。ユニバーサルリンクが動作しない場合は、Appleの「Troubleshooting Universal Links (opens new window)」を参照してください。次の手順に進む前に、ユニバーサルリンクが動作することを確認してください。
# 2. LINE Developersコンソールでユニバーサルリンクを設定する
手順については、「アプリをチャネルにリンクする」を参照してください。この例では、https://yourdomain.com/line-auth/
に設定します。
# 3. ユニバーサルリンクを指定してLoginManager.setup
メソッドを呼び出す
LoginManager.setup
メソッドを呼び出すときに、ユニバーサルリンクをLINE SDK for iOS Swiftに渡します。これにより、ユニバーサルリンクの不正使用を防ぐため、リンクがLINE Developersコンソールとアプリの両方で正しく設定されていることがLINEログインによって検証されます。以下の例では、ユニバーサルリンクはhttps://yourdomain.com/line-auth/
です。
let link = URL(string: "https://yourdomain.com/line-auth/")
LoginManager.shared.setup(channelID: "YOUR_CHANNEL_ID", universalLinkURL: link)
LoginManager.setup
メソッドについて詳しくは、「iOSアプリにLINEログインを組み込む」を参照してください。
# 4. ユニバーサルリンクでアプリが起動した後でログイン結果を制御する
LINEプラットフォームから返されたログイン結果を制御するには、取得したURLをLoginManager
のapplication(_:open:options:)
メソッドに渡します。プロジェクトがマルチウィンドウ(iOS13で導入された機能 (opens new window))をサポートするかどうかで、アプリデリゲートクラスまたはシーンデリゲートクラスを変更する必要があります。
# アプリデリゲートを変更する
iOS 12以前では、UIApplicationDelegate
オブジェクトを呼び出して、URLを開きます。したがって、アプリデリゲートクラスにapplication(_:continue:restorationHandler:)
デリゲートメソッドが存在していれば、以下の行を追加します。デリゲートメソッドが存在しない場合は、以下のとおりにデリゲートメソッドを作成してください。
func application(
_ app: UIApplication,
continue userActivity: NSUserActivity,
restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool
{
if LoginManager.shared.application(app, open: userActivity.webpageURL) {
return true
}
// Your other code to handle universal links and/or user activities.
}
# シーンデリゲートを変更する
iOS 13以降では、UISceneDelegate
オブジェクトを呼び出して、URLを開きます。
Xcode 11以降でプロジェクトを作成した場合は、デフォルトでは、プロジェクトにはSceneDelegate.swift
ファイルが含まれ、Info.plist
ファイルにはUIApplicationSceneManifest
エントリーが含まれます。
アプリがマルチウィンドウをサポートする場合は、使用するシーンデリゲートクラスに、次の行を追加します。
// SceneDelegate.swift
func scene(_ scene: UIScene, openURLContexts URLContexts: Set<UIOpenURLContext>) {
_ = LoginManager.shared.application(.shared, open: URLContexts.first?.url)
}
ただし、アプリがマルチウィンドウをサポートしていない場合は、UIApplicationDelegate
オブジェクトを呼び出して、URLを開きます。アプリデリゲートクラスを変更してください。
これで、ユニバーサルリンクを使ってLINEからアプリを起動し、アプリでログイン結果を制御できるようになりました。