Flutter Line登录认证插件line_login_sdk的使用
Flutter Line登录认证插件line_login_sdk的使用
flutter_line_sdk
一个允许开发者在Flutter应用中通过Dart访问LINE原生SDK的Flutter插件。
该插件可以帮助你在应用中集成LINE登录功能。你可以将用户重定向到LINE或网页,以使用其LINE凭据进行登录。例如:
import 'package:flutter_line_sdk/flutter_line_sdk.dart';
void login() async {
try {
final result = await LineSDK.instance.login();
setState(() {
_userProfile = result.userProfile;
// 用户ID -> result.userProfile?.userId
// 用户名 -> result.userProfile?.displayName
// 用户头像 -> result.userProfile?.pictureUrl
// 等等...
});
} on PlatformException catch (e) {
// 错误处理。
print(e);
}
}
前置条件
从版本2.0开始,flutter_line_sdk
支持Dart的空安全。如果你仍在寻找不带空安全的旧版本,请查看版本1.3.0。
- iOS部署目标为13.0或更高版本
- Android
minSdkVersion
设置为24或更高(Android 7.0或更高版本) - 已将LINE登录通道链接到你的应用
要从移动平台访问你的LINE登录通道,你需要一些额外的配置。在LINDE开发者控制台中,进入你的LINE登录通道设置,并在应用设置选项卡中输入以下信息。
iOS应用设置
设置项 | 描述 |
---|---|
iOS Bundle ID | 必填。应用的Bundle标识符。在Xcode中,可以在Runner项目设置的常规标签页中找到它。必须为小写,如com.example.app 。可以指定多个Bundle标识符,每个标识符占一行。 |
iOS Universal Link | 可选。设置为配置好的应用的Universal Link。有关如何使用Universal Link处理登录流程的更多信息,请参阅Universal Links支持。 |
Android应用设置
设置项 | 描述 |
---|---|
Android包名 | 必填。用于启动Google Play商店的应用包名。 |
Android包签名 | 可选。可以通过每行输入一个签名来设置多个签名。 |
Android Scheme | 可选。用于启动应用的自定义URL Scheme。 |
安装
添加flutter_line_sdk包
使用标准方式将此包添加到你的Flutter应用中,如Flutter文档所述。该过程包括以下步骤:
- 打开应用文件夹中的
pubspec.yaml
文件,在dependencies
下添加flutter_line_sdk:
。 - 在终端运行以下命令以安装它:
flutter pub get
。
现在,flutter_line_sdk
的Dart部分应该已经安装完成。接下来,你需要分别为iOS和Android项目设置LINE SDK。
设置LINE SDK
iOS
在文本编辑器中打开ios/Runner/Info.plist
文件,并在其最后的</dict>
标签之前插入以下片段:
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleTypeRole</key>
<string>Editor</string>
<key>CFBundleURLSchemes</key>
<array>
<!-- 指定返回LINE时使用的URL Scheme -->
<string>line3rdp.$(PRODUCT_BUNDLE_IDENTIFIER)</string>
</array>
</dict>
</array>
<key>LSApplicationQueriesSchemes</key>
<array>
<!-- 指定启动LINE时使用的URL Scheme -->
<string>lineauth2</string>
</array>
由于LINE SDK现在需要iOS 13.0或更高版本来提供底层原生功能,因此你必须在ios/Podfile
文件的Runner
目标中添加以下行:
target 'Runner' do
+ platform :ios, '13.0'
use_frameworks!
use_modular_headers!
...
Android
为了确保与最新功能兼容,你需要将应用的build.gradle
文件中的minSdk
版本更新为24
或更高。
以下是具体步骤:
- 打开应用的
build.gradle
文件。 - 定位到
android
块,并在其内部找到defaultConfig
块。 - 在
defaultConfig
块中,将当前的minSdk
值替换为24
。
以下是更改后的差异示例:
android {
defaultConfig {
- minSdk flutter.minSdkVersion
+ minSdk 24
}
}
导入和使用
设置
在项目中任何需要使用的地方导入flutter_line_sdk
:
import 'package:flutter_line_sdk/flutter_line_sdk.dart';
要使用该包,你需要设置频道ID。你可以通过调用setup
方法来完成此操作,例如在main
函数中:
- void main() => runApp(MyApp());
+ void main() {
+ WidgetsFlutterBinding.ensureInitialized();
+ LineSDK.instance.setup("${your_channel_id}").then((_) {
+ print("LineSDK Prepared");
+ });
+ runApp(App());
+ }
这只是示例。你可以在任何时候调用setup
,但必须确保只调用一次,并且在调用任何其他LINE SDK方法之前调用。
为了帮助你快速上手,我们列出了几个基本用法示例。所有可用的flutter_line_sdk
方法都在Dart Packages站点上有详细说明。
登录
现在你可以让用户通过LINE登录了。
通过将Future<LoginResult>
的值赋给变量来获取登录结果。
为了优雅地处理错误,请将其包装在一个try...on
语句中:
void _signIn() async {
try {
final result = await LineSDK.instance.login();
// 用户ID -> result.userProfile?.userId
// 用户名 -> result.userProfile?.displayName
// 用户头像 -> result.userProfile?.pictureUrl
} on PlatformException catch (e) {
_showDialog(context, e.toString());
}
}
默认情况下,login
使用["profile"]
作为其范围。在这种情况下,登录完成后,result
中会有一个userProfile
值。
如果需要其他范围,请将它们作为列表传递给login
。更多内容请参见范围文档。
final result = await LineSDK.instance.login(
scopes: ["profile", "openid", "email"]
);
// 用户邮箱,如果用户在LINE中设置了邮箱并授予了你的请求。
final userEmail = result.accessToken.email;
注意:虽然可能无用,但如果未包含
"profile"
范围,则userProfile
将是null
。
注销
try {
await LineSDK.instance.logout();
} on PlatformException catch (e) {
print(e.message);
}
获取用户资料
try {
final result = await LineSDK.instance.getProfile();
// 用户ID -> result.userId
// 用户名 -> result.displayName
// 用户头像 -> result.pictureUrl
} on PlatformException catch (e) {
print(e.message);
}
获取当前存储的访问令牌
try {
final result = await LineSDK.instance.currentAccessToken;
// 访问令牌 -> result?.value
} on PlatformException catch (e) {
print(e.message);
}
注意:如果用户未登录,它将返回
null
。此方法的有效result
并不一定意味着访问令牌本身有效。它可能已过期或被用户从另一台设备或LINE客户端撤销。
使用LINE服务器验证访问令牌
try {
final result = await LineSDK.instance.verifyAccessToken();
// 如果令牌有效,result.data是可访问的。
} on PlatformException catch (e) {
print(e.message);
// 令牌无效,或其他错误。
}
刷新当前访问令牌
try {
final result = await LineSDK.instance.refreshToken();
// 访问令牌 -> result.value
// 过期时间 -> result.expiresIn
} on PlatformException catch (e) {
print(e.message);
}
通常情况下,你不需要手动刷新访问令牌,因为LINE SDK会在必要时自动尝试刷新访问令牌。我们不建议手动刷新访问令牌。让LINE SDK自动管理访问令牌通常更简单、更安全、更具未来性。
错误处理
所有API都可以抛出带有code
和message
的PlatformException
。使用这些信息来识别原生SDK内部发生的错误。
错误代码和消息在iOS和Android之间可能会有所不同。请务必阅读iOS的错误定义和Android的错误定义,以便在不同平台上提供更好的错误恢复和用户体验。
贡献
如果你认为发现了一个漏洞或有与安全相关的任何问题,请不要公开发布问题。而是发送电子邮件至dl_oss_dev@linecorp.com。
在为本项目做出贡献之前,请阅读CONTRIBUTING.md。
示例代码
以下是完整的示例代码:
import 'package:flutter/material.dart';
import 'package:line_login_sdk/line_login_sdk.dart';
void main() {
WidgetsFlutterBinding.ensureInitialized();
LineSDK.instance.setup('1620019587').then((_) {
print('LineSDK Prepared');
});
runApp(MyApp());
}
class MyApp extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(title: Text('LINE Login Example')),
body: Center(
child: ElevatedButton(
onPressed: () async {
try {
final result = await LineSDK.instance.login();
print('User Profile: ${result.userProfile}');
} on PlatformException catch (e) {
print('Error: ${e.message}');
}
},
child: Text('Login with LINE'),
),
),
),
);
}
}
更多关于Flutter Line登录认证插件line_login_sdk的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter Line登录认证插件line_login_sdk的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
在Flutter中使用line_login_sdk
插件进行Line登录认证的步骤如下:
1. 添加依赖
首先,在你的pubspec.yaml
文件中添加line_login_sdk
插件的依赖:
dependencies:
flutter:
sdk: flutter
line_login_sdk: ^2.0.0 # 请使用最新版本
然后运行flutter pub get
来安装依赖。
2. 配置Line开发者账号
在使用Line登录之前,你需要注册一个Line开发者账号并创建一个应用以获取Channel ID
。
- 访问 Line Developers 并登录。
- 创建一个新的Provider(如果你还没有)。
- 创建一个新的Channel(应用),选择
Login
类型。 - 获取
Channel ID
,并配置回调URL。
3. 配置Android项目
在android/app/src/main/AndroidManifest.xml
文件中添加以下配置:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.yourapp">
<application
android:label="YourApp"
android:icon="@mipmap/ic_launcher">
<!-- Add this activity for Line Login -->
<activity
android:name="com.linecorp.linesdk.auth.LineAuthenticationActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="line3rdp.com.example.yourapp" />
</intent-filter>
</activity>
</application>
</manifest>
将line3rdp.com.example.yourapp
替换为你的应用包名。
4. 配置iOS项目
在ios/Runner/Info.plist
文件中添加以下配置:
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleURLSchemes</key>
<array>
<string>line3rdp.$(PRODUCT_BUNDLE_IDENTIFIER)</string>
</array>
</dict>
</array>
<key>LSApplicationQueriesSchemes</key>
<array>
<string>lineauth2</string>
</array>
5. 初始化Line登录SDK
在你的Flutter项目中初始化Line登录SDK:
import 'package:line_login_sdk/line_login_sdk.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
// 初始化Line登录SDK
await LineLoginSdk.instance.initialize(
channelId: 'YOUR_CHANNEL_ID',
);
runApp(MyApp());
}
6. 实现Line登录
在你的应用界面中,添加一个按钮并实现Line登录逻辑:
import 'package:flutter/material.dart';
import 'package:line_login_sdk/line_login_sdk.dart';
class LoginPage extends StatelessWidget {
Future<void> _loginWithLine() async {
try {
final result = await LineLoginSdk.instance.login();
if (result.isSuccess) {
// 登录成功
final accessToken = result.accessToken;
final userProfile = result.userProfile;
print('登录成功: $userProfile');
} else {
// 登录失败
print('登录失败: ${result.errorMessage}');
}
} catch (e) {
print('登录异常: $e');
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Line登录'),
),
body: Center(
child: ElevatedButton(
onPressed: _loginWithLine,
child: Text('使用Line登录'),
),
),
);
}
}
7. 处理登出
你可以使用以下代码来处理用户登出:
Future<void> _logoutFromLine() async {
try {
await LineLoginSdk.instance.logout();
print('登出成功');
} catch (e) {
print('登出异常: $e');
}
}
8. 获取用户信息
登录成功后,你可以通过result.userProfile
获取用户信息,例如:
final userProfile = result.userProfile;
print('用户ID: ${userProfile.userId}');
print('用户姓名: ${userProfile.displayName}');
print('用户头像: ${userProfile.pictureUrl}');
print('用户状态: ${userProfile.statusMessage}');