[Swift 5]登录LINE获取个人资料信息


环境

  • Xcode版本10.2
  • 迅捷5

要做的事情

linelogin.gif

应用程序登录LINE并获取您的个人资料信息。

向LINE开发人员注册应用

①登录到LINE开发人员

从https://developers.line.biz/ja/

登录

由于这一次我们使用个人帐户进行开发,请选择"使用LINE帐户登录"。

スクリーンショット 2019-04-14 13.40.46.png

将会提示您输入电子邮件地址和密码,因此请输入它们以登录。
スクリーンショット 2019-04-14 13.52.14.png

②提供商?创建一个新的渠道

创建提供程序后,创建频道。

スクリーンショット 2019-06-23 20.49.54.png

提供程序是您登录时显示为提供程序的信息。
登录LINE时,将显示您在此处输入的信息。
频道是按应用创建的。

在这里,选择LINE登录。
スクリーンショット 2019-06-23 20.53.06.png

接下来,输入所需信息并注册。
用户将看到它,因此请根据需要设置其格式并输入。
这次的输入内容如下。

提供程序:TestProvider
图标:未设置
应用名称:测试应用
应用说明:登录测试。

*顺便说一句,如果输入以上内容,则登录LINE时将显示以下内容。

IMG_1440.PNG

IMG_1441.PNG

尽管是输入内容,但请仔细描述,因此您可以根据描述内容进行输入。
(您几乎可以在以后编辑它。)

スクリーンショット 2019-06-23 20.59.47.png

スクリーンショット 2019-06-23 21.00.01.png

输入

后,确认输入内容并注册,然后将创建通道。

スクリーンショット 2019-06-23 21.12.53.png

*这次,它被设置为私人测试,但是
我认为有必要在发布时将其公开。

③确认已发出ChannelId

您可以通过单击创建的频道来编辑注册内容。
*您也可以从这里申请openId。

スクリーンショット 2019-06-23 21.02.33.png

您可以看到

ChannelId已发出。
这用于应用程序侧的设置。
スクリーンショット 2019-06-23 21.03.52.png

④设置应用程序的捆绑ID

您可以通过打开应用程序设置来设置捆绑包ID和方案。
(如果尚未创建应用程序,请在创建应用程序后对其进行设置。)

スクリーンショット 2019-06-23 21.04.06.png

如果它与在应用程序侧设置的bundleID(x代码)不同,则
请注意,将发生错误,并且您将无法登录LINE。 :cold_sweat:

*顺便说一句,在上述情况下,发生以下错误。

1
error: authorizeFailed(reason: LineSDK.LineSDKError.AuthorizeErrorReason.webLoginError(error: "invalid_request", description: Optional("Invalid+URI+:+[line3rdp.hoge.LineLoginSample://authorize/]")))

如果可以执行此操作,则LINE开发人员中的设置已完成。

设置为使用带有X代码的LINE登录

①链接应用程序和LINE开发人员的设置

基本上,如果您参考以下文章,则可以顺利进行。
它被很好地列出。 :innocent:

设置LINE SDK for iOS项目

主要要做的事情如下。 (无特定顺序)

  • LINE SDK的介绍(吊舱,迦太基等)
  • 开启KeyChain Shahareing设定
  • 在Info.plist的URL方案中设置line3rdp.$(PRODUCT_BUNDLE_IDENTIFIER)
  • 在Info.plist的LineSDKConfig中设置ChannelId

*参考图片
スクリーンショット 2019-06-23 21.47.48.png

スクリーンショット 2019-06-23 22.34.32.png

(2)实施AppDelegate

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import UIKit
import LineSDK

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

    var window: UIWindow?

    func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool {
        return LoginManager.shared.application(app, open: url, options: options)
    }

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        // アプリの起動直後に、LoginManager.setupメソッドを呼び出す
        // https://developers.line.biz/ja/docs/ios-sdk/swift/integrate-line-login/
        // setupメソッドを呼び出した後で他のメソッドを呼び出したりすること
        LoginManager.shared.setup(channelID: "LINE developersで発行されたchannelIDを入力", universalLinkURL: nil)
        return true
    }
}

③实施登录按钮

基本上,您可以参考以下文章来顺利进行。
(此外,本文存在的意义?)

将LINE登录信息整合到LINE SDK for iOS iOS应用

放置登录按钮的视图控制器实现如下。
作为一种方法,我已经确认了两种方法,因此我将分别进行描述。

1.如何使用SDK LoginButton

UIButton放置在Storybord上,并且Outlet连接到LoginButton。
スクリーンショット 2019-06-23 22.29.40.png

实现内容如下。

  • 登录按钮的位置
  • LoginButtonDelegate委托方法的实现

  • 访问令牌到期日期?访问令牌日志输出
  • 记录配置文件信息(用户名,状态,图标图像URL)的输出(实际上,我在secondView中显示了配置文件信息,但是由于代码似乎很微妙,所以我不会发布它)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
import UIKit
import LineSDK

final class ViewController: UIViewController, LoginButtonDelegate {

    /// ログインボタン
    @IBOutlet weak var loginButton: LoginButton!

    override func viewDidLoad() {
        super.viewDidLoad()
        // delegateをセット
        self.loginButton.delegate = self
        // 設定しないとエラーになる↓(今回はプロフィール情報を取得する)
        self.loginButton.permissions = [.profile]

        // アクセストークンの有効期限
        if let token = AccessTokenStore.shared.current {
            print("Token expires at:\(token.expiresAt)")
            print(token.expiresAt.toStringWithCurrentLocale())
        }

        // 現在のアクセストークン
        if let token = AccessTokenStore.shared.current {
            print("Token value:\(token.value)")
        }
    }

    /// ログイン開始時に呼ばれる
    func loginButtonDidStartLogin(_ button: LoginButton) {
        print("Login Start")
    }

    /// ログイン成功時に呼ばれる
    func loginButton(_ button: LoginButton, didSucceedLogin loginResult: LoginResult) {
        print("Login Succeed")

        if let profile = loginResult.userProfile {
            print(profile.userID)
            print(profile.displayName)
            print(profile.pictureURL!)
            print(profile.statusMessage!)
        }
        // 画面遷移
        self.transitionSecondView()
    }

    /// ログイン失敗時に呼ばれる
    func loginButton(_ button: LoginButton, didFailLogin error: Error) {
        print("Login Faild")
    }

    /// 画面遷移
    func transitionSecondView() {
        let storyboard: UIStoryboard = self.storyboard!
        let secondView = storyboard.instantiateViewController(withIdentifier: "secondView")
        present(secondView, animated: true, completion: nil)
    }
}

extension Date {
    /// 現在時刻を取得
    ///
    /// - Returns: 現在時刻
    func toStringWithCurrentLocale() -> String {
        let formatter = DateFormatter()
        formatter.timeZone = TimeZone.current
        formatter.locale = Locale.current
        formatter.dateFormat = "yyyy-MM-dd HH:mm:ss"
        return formatter.string(from: self)
    }
}

2.如何从UIButton

使用LoginManager.shared.login

按下登录按钮时只需调用LoginManager.shared.login。

实现内容如下。

  • 登录按钮的位置(UIBtton)
  • 日志访问令牌
  • 日志输出配置文件信息(用户名,状态,图标图像URL)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
    /// ログイン処理
    func login() {
        LoginManager.shared.login(permissions: [.profile], in: self) {
            result in
            switch result {
            case .success(let loginResult):
                if let profile = loginResult.userProfile
                    print(profile.displayName)
                    print(profile.pictureURL!)
                    print(profile.statusMessage!)
                }
                print("Login Token value:\(loginResult.accessToken.value)")
            case .failure(let error):
                print("error:",error)
            }
        }
    }

概括

(如果您不使用openId),对于初学者来说LINE登录非常容易,
我觉得它易于实现,因为日语参考文件也很到位。
如果您有任何建议或建议,请随时与我们联系。

参考

  • LINE SDK for iOS Swift概述
  • 适用于iOS Swift的LINE SDK v5.0