一个 Flutter 插件,可将 LINE SDK 集成到 Flutter 应用中,使开发者能够利用 LINE 的身份验证、消息传递和分享功能。该插件支持 Android 和 iOS 平台,提供无缝方式在应用中添加 LINE 登录、富媒体消息和交互式内容。该插件由 LINE 开发者维护,并可通过 pub.dev 轻松设置。它通过 LINE 生态系统促进用户参与,同时保持与 Flutter 跨平台能力的兼容性。
适合场景
实现 LINE 登录认证
通过 LINE 启用应用内消息传递
通过 LINE 分享内容
集成 LINE Pay 功能
构建基于聊天的用户体验
主要特点
跨平台支持 Android 和 iOS
通过 pub.dev 与 Flutter 轻松集成
由 LINE 官方维护
支持 LINE 登录和消息分享
提供跨平台的一致性 API
适合对象
需要 LINE 身份验证的应用
社交或社区驱动的应用程序
使用LINE Pay的电商应用
在 LINE 生态系统上开发的开发者
面向日语或亚洲市场的Flutter项目
使用建议
需要在 LINE 开发者控制台中进行配置
仅限 LINE 特有功能
可能需要额外权限才能完全使用功能
某些功能依赖于设备上安装了LINE应用
不适用于非LINE相关用例
原始 README
以下为关联源码仓库的 README 原文快照,最新内容请访问源码仓库。
flutter_line_sdk
A Flutter plugin that lets developers access LINE's native SDKs in Flutter apps with Dart.
The plugin helps you integrate LINE Login features in your app. You can redirect users to LINE or a web page where they log in with their LINE credentials. Example:
import'package:flutter_line_sdk/flutter_line_sdk.dart';
voidlogin() async {
try {
final result = awaitLineSDK.instance.login();
setState(() {
_userProfile = result.userProfile;
// user id -> result.userProfile?.userId// user name -> result.userProfile?.displayName// user avatar -> result.userProfile?.pictureUrl// etc...
});
} onPlatformExceptioncatch (e) {
// Error handling.print(e);
}
}
From version 2.0, flutter_line_sdk supports null safety. If you are still seeking a legacy version without null safety, check version 1.3.0.
Flutter 3.44.0 or later. Version 3.0 relies on Flutter's built-in Kotlin support for Android builds; if your project is still on an older Flutter version, use flutter_line_sdk 2.x instead.
iOS 15.0 or later as the deployment target
Android minSdkVersion set to 24 or higher (Android 7.0 or later)
To access your LINE Login channel from a mobile platform, you need some extra configuration. In the LINE Developers console, go to your LINE Login channel settings, and enter the below information on the App settings tab.
iOS app settings
Setting
Description
iOS bundle ID
Required. Bundle identifier of your app. In Xcode, find it in your Runner project settings, on the General tab. Must be lowercase, like com.example.app. You can specify multiple bundle identifiers by typing each one on a new line.
iOS universal link
Optional. Set to the universal link configured for your app. For more information on how to handle the login process using a universal link, see Universal Links support.
Android app settings
Setting
Description
Android package name
Required. Application's package name used to launch the Google Play store.
Android package signature
Optional. You can set multiple signatures by typing each one on a new line.
Android scheme
Optional. Custom URL scheme used to launch your app.
Installation
Adding flutter_line_sdk package
Use the standard way of adding this package to your Flutter app, as described in the Flutter documentation:
flutter pub add flutter_line_sdk
Now, the Dart part of flutter_line_sdk should be installed. Next, you need to set up LINE SDK for iOS and Android projects, respectively.
Set up LINE SDK
iOS
Open the file ios/Runner/Info.plist in a text editor and insert this snippet just before the last </dict> tag:
<key>CFBundleURLTypes</key><array><dict><key>CFBundleTypeRole</key><string>Editor</string><key>CFBundleURLSchemes</key><array><!-- Specify URL scheme to use when returning from LINE to your app. --><string>line3rdp.$(PRODUCT_BUNDLE_IDENTIFIER)</string></array></dict></array><key>LSApplicationQueriesSchemes</key><array><!-- Specify URL scheme to use when launching LINE from your app. --><string>lineauth2</string></array>
Because LINE SDK now requires iOS 15.0 or above to provide underlying native features, while the default deployment
target of Flutter is 13.0, you must set the deployment target to 15.0 or higher.
Swift Package Manager integration (default)
Following Flutter's official direction, Swift Package Manager is the default way of managing iOS native dependencies since Flutter 3.44, and it is the integration path this plugin primarily targets. The bundled example app uses Swift Package Manager exclusively and cannot be built with Swift Package Manager opted out.
CocoaPods integration keeps working and remains supported, but it is in maintenance mode, in line with Flutter's own plan for CocoaPods. If your project has opted out of Swift Package Manager, add this line in the Runner target in ios/Podfile:
target 'Runner' do
+ platform :ios, '15.0'
use_frameworks!
use_modular_headers!
...
Android
To ensure compatibility with the latest features, you need to update the minSdk version in your app's build.gradle file to 24 or higher.
Here's how you can do it:
Open your app's build.gradle file.
Locate the android block, and within it, find the defaultConfig block.
In the defaultConfig block, replace the current minSdk value with 24.
Here's a diff to show what your changes might look like:
This is merely an example. You can call setup any time you want, provided you call it exactly once, before calling any other LINE SDK methods.
To help you get started with this package, we list several basic usage examples below. All available flutter_line_sdk methods are documented on the Dart Packages site.
Login
Now you are ready to let your user log in with LINE.
Get the login result by assigning the value of Future<LoginResult> to a variable.
To handle errors gracefully, wrap the invocation in a try...on statement:
void_signIn() async {
try {
final result = awaitLineSDK.instance.login();
// user id -> result.userProfile?.userId// user name -> result.userProfile?.displayName// user avatar -> result.userProfile?.pictureUrl
} onPlatformExceptioncatch (e) {
_showDialog(context, e.toString());
}
}
By default, login uses ["profile"] as its scope. In this case, when login is done, you have a userProfile value in login result.
If you need other scopes, pass them in a list to login. See the Scopes documentation for more.
final result = awaitLineSDK.instance.login(
scopes: ["profile", "openid", "email"]
);
// user email, if user set it in LINE and granted your request.final userEmail = result.accessToken.email;
Although it might be useless, if you do not contain a "profile" scope, userProfile will be a null value.
try {
final result = awaitLineSDK.instance.getProfile();
// user id -> result.userId// user name -> result.displayName// user avatar -> result.pictureUrl
} onPlatformExceptioncatch (e) {
print(e.message);
}
Get current stored access token
try {
final result = awaitLineSDK.instance.currentAccessToken;
// access token -> result?.value
} onPlatformExceptioncatch (e) {
print(e.message);
}
If the user isn't logged in, it returns a null. A valid result of this method doesn't necessarily mean the access
token itself is valid. It may have expired or been revoked by the user from another device or LINE client.
Verify access token with LINE server
try {
final result = awaitLineSDK.instance.verifyAccessToken();
// result.data is accessible if the token is valid.
} onPlatformExceptioncatch (e) {
print(e.message);
// token is not valid, or any other error.
}
Normally, you don't need to refresh access tokens manually, because any API call in LINE SDK will try to refresh the access token automatically when necessary.
We do not recommend refreshing access tokens yourself.
It's generally easier, more secure, and more future-proof to let the LINE SDK manage access tokens automatically.
Error handling
All APIs can throw a PlatformException with error code and a message. Use this information to identify when an error happens inside the native SDK.
Error codes and messages will vary between iOS and Android. Be sure to read the error definition on iOS and Android to provide better error recovery and user experience on different platforms.
Contributing
If you believe you found a vulnerability or you have an issue related to security, please DO NOT open a public issue. Instead, send us an email at [dl_oss_dev@linecorp.com](mailto:dl_oss_dev@linecorp.com).
Before contributing to this project, please read CONTRIBUTING.md.