SwiftUIアプリにLINEログインを追加、ユーザープロファイル情報の取得(.onOpenURLモディファイアを使用)
この記事では、SwiftUIアプリでLineログインを統合し、ログイン成功時にユーザーのプロファイル情報を取得することについて説明します。
この記事では、SwiftUIアプリでLineログインを統合し、ログイン成功時にユーザーのプロファイル情報を取得することについて説明します。
私は新しいChatGPT iOSアプリ(興味があれば私のTwitterをチェックしてください)でLineログイン機能を実装していたのですが、SwiftUIアプリ用のインストラクションがないことを発見しました。そこで、この記事を書きました。
SwiftUIアプリとは
認証に成功した後、
LineはアプリのカスタムURLスキーマを呼び出し、
認証トークンの情報を提供します。
SwiftUIアプリでは、onOpenURL
モディファイアがあり、
ユーザーがLineで認証した後のログイン結果を処理するために使用することができます。
アプリの登録
まず、LINEのデベロッパーサイトにアクセスし、アプリケーションを登録します。
まず、プロバイダを作成します。
これは会社名でも自分の名前でもかまいません。
プロバイダーは複数のチャンネル(アプリケーション)を含むことができます。
次に、作成したプロバイダーをクリックし、アプリケーション(チャネル)を作成します。
種類は、"LINEログイン"を選択します。
新しいチャンネルのフォームで、
情報を入力します。
"アプリの種類"で、"ネイティブアプリ "をトグルします。
リストに自分のチャンネルが表示されるので、クリックして開きます。
「LINEログイン設定」にて、iOSアプリケーションのバンドルIDを入力します。
ここで、「チャンネル基本設定」タブにある チャンネルID
を覚えておきましょう
また、チャンネルを公開とマークすることを確認してください。
SDKを統合
LineSDK
はSwift Packageを使用しても配布されています。
プロジェクトに追加するには、Xcodeの「File」メニューをタップし、「Add Packages」をクリックしてください。以下のURLを入力します:
https://github.com/line/line-sdk-ios-swift.git
そして、「LineSDK」にチェックを入れ、メインとなるiOSターゲットを選択し、フレームワークを追加します。
URLタイプの追加
ユーザーがLINEで認証されると、LINEはURLスキーマを使ってあなたのアプリを呼び出します。そのURLスキーマを定義する必要があります。
プロジェクトファイルを開き、iOSアプリのターゲットを選択し、Info
タブで、以下のURLスキーマを追加します。
line3rdp.$(PRODUCT_BUNDLE_IDENTIFIER)
:
SDKの初期化
SwiftUIアプリのファイル(@mainがあるファイル)内で、
SDKをインポートし、
アプリ起動時にLine SDKを初期化するためのAppDelegateアダプタを追加します。
channelID
には、チャンネルページのチャンネルIDです。
認証結果の処理
SwiftUIアプリの場合、
認証結果を処理するためにonOpenURL
を使用する必要があります。
SwiftUIアプリのファイルに、
ログインを処理するコードを追加します:
SwiftUI ビューにログインボタンを追加する
ログインの状態を監視するために、observed
オブジェクトを使用することにします。
ここでの値は、ログインボタンを表示するビューに伝え返されます。
また、より多くの情報を含むカスタム構造体を使用することもできます。
まず、SwiftUIでUIKit Lineログインボタンを表示するための互換ビューを作成する必要があります:
ログインボタンを表示するビューにログインの状態を報告するために、LineLoginStatus
を使用しています。
その中で、@Published
変数を使用し、
これらの変数値の変更によってビューを更新します
(そして.onChangeビューモディファイアを呼び出します)。
SwiftUIビューにLINEのログインボタンを追加する
さて、SwiftUIのビューにボタンを追加することができます:
onChange`ビューモディファイアを使って、ユーザーIDの変更(サインイン成功時)とエラーメッセージ(エラー時)を監視しています。
これで、このアプリを実行し、ユーザーがログインに成功したときにユーザーIDを確認することができます。
お読みいただきありがとうございました。
☺️ サイト https://MszPro.com
Written by MszPro~