|
12 | 12 |
|
13 | 13 | Logto's flutter SDK for native apps.
|
14 | 14 |
|
15 |
| -## Installation |
| 15 | +[pub.dev](https://pub.dev/packages/logto_dart_sdk) |
16 | 16 |
|
17 |
| -```sh |
18 |
| -flutter pub get logto_dart_sdk |
19 |
| -``` |
| 17 | +## Packages |
20 | 18 |
|
21 |
| -## Products |
| 19 | +- logto_core: Core SDK is used for generation dart project with basic API and util method provided. |
| 20 | +- logto_client: Client SDK for flutter native apps. Built based on logto_core with user sign-in interaction flow integrated |
22 | 21 |
|
23 |
| -| Name | Description | |
24 |
| -| ------------ | ----------------------------------------------------------------------------------------------------------- | |
25 |
| -| logto_core | Core SDK is used for generation dart project with basic API and util method provided. | |
26 |
| -| logto_client | Client SDK for flutter native apps. Built based on logto_core with user sign-in interaction flow integrated | |
| 22 | +## Platforms |
27 | 23 |
|
28 |
| -## Logto Client |
| 24 | +iOS, Android |
29 | 25 |
|
30 |
| -### Configurations |
| 26 | +## Integration Guide |
31 | 27 |
|
32 |
| -#### flutter_secure_storage |
33 |
| - |
34 |
| -We use [flutter_secure_storage](https://pub.dev/packages/flutter_secure_storage) to implement the cross-platform persistent auth_token secure storage. |
35 |
| - |
36 |
| -- Keychain is used for iOS |
37 |
| -- AES encryption is used for Android. |
38 |
| - |
39 |
| -Configure Android version: |
40 |
| - |
41 |
| -In [project]/android/app/build.gradle set minSdkVersion to >= 18. |
42 |
| - |
43 |
| -```gradle |
44 |
| -android { |
45 |
| - ... |
46 |
| -
|
47 |
| - defaultConfig { |
48 |
| - ... |
49 |
| - minSdkVersion 18 |
50 |
| - ... |
51 |
| - } |
52 |
| -} |
53 |
| -
|
54 |
| -``` |
55 |
| - |
56 |
| -> Note By default Android backups data on Google Drive. It can cause exception java.security.InvalidKeyException:Failed to unwrap key. You need to: |
57 |
| -> |
58 |
| -> - disable autobackup, |
59 |
| -> - exclude sharedprefs FlutterSecureStorage used by the plugin |
60 |
| -
|
61 |
| -1. To disable autobackup, go to your app manifest file and set the boolean value android:allowBackup. |
62 |
| - |
63 |
| -```xml |
64 |
| -<manifest ... > |
65 |
| - ... |
66 |
| - <application |
67 |
| - android:allowBackup="false" |
68 |
| - android:fullBackupContent="false"> |
69 |
| - ... |
70 |
| - > |
71 |
| - ... |
72 |
| - </application> |
73 |
| -</manifest> |
74 |
| -``` |
75 |
| - |
76 |
| -2. Exclude sharedprefs FlutterSecureStorage. |
77 |
| - |
78 |
| -If you need to enable the android:fullBackupContent for your app. Set up a backup rule to [exclude](https://developer.android.com/guide/topics/data/autobackup#IncludingFiles) the prefs used by the plugin. |
79 |
| - |
80 |
| -```xml |
81 |
| -<application ... |
82 |
| - android:fullBackupContent="@xml/backup_rules"> |
83 |
| -</application> |
84 |
| -``` |
85 |
| - |
86 |
| -```xml |
87 |
| -<?xml version="1.0" encoding="utf-8"?> |
88 |
| -<full-backup-content> |
89 |
| - <exclude domain="sharedpref" path="FlutterSecureStorage"/> |
90 |
| -</full-backup-content> |
91 |
| -``` |
92 |
| - |
93 |
| -Please check [flutter_secure_storage](https://pub.dev/packages/flutter_secure_storage#configure-android-version) for more details. |
94 |
| - |
95 |
| -#### flutter_web_auth |
96 |
| - |
97 |
| -[flutter_web_auth](https://pub.dev/packages/flutter_appauth) is used behind Logto's flutter SDK. We rely on its webview-based interaction interface to open Logto's authorization pages. |
98 |
| - |
99 |
| -> In the background, this plugin uses ASWebAuthenticationSession on iOS 12+ and macOS 10.15+, SFAuthenticationSession on iOS 11, Chrome Custom Tabs on Android and opens a new window on Web. You can build it with iOS 8+, but it is currently only supported by iOS 11 or higher. |
100 |
| -
|
101 |
| -Android |
102 |
| - |
103 |
| -In order to capture the callback url from Logto's sign-in web page, you will need to register your sign-in redirectUri to the `AndroidManifest.xml`. |
104 |
| - |
105 |
| -```xml |
106 |
| -<activity android:name="com.linusu.flutter_web_auth.CallbackActivity" android:exported="true"> |
107 |
| - <intent-filter android:label="flutter_web_auth"> |
108 |
| - <action android:name="android.intent.action.VIEW"/> |
109 |
| - <category android:name="android.intent.category.DEFAULT"/> |
110 |
| - <category android:name="android.intent.category.BROWSABLE"/> |
111 |
| - <data android:scheme="io.logto"/> |
112 |
| - </intent-filter> |
113 |
| -</activity> |
114 |
| -``` |
115 |
| - |
116 |
| -By doing so, your app will automatically capture the callbaclUri after a successful sign-in and redirect the user back to the app. |
117 |
| - |
118 |
| -### Basic Usage |
119 |
| - |
120 |
| -```dart |
121 |
| -import 'package:logto_dart_sdk/logto_dart_sdk.dart'; |
122 |
| -
|
123 |
| -// ... |
124 |
| -late LogtoClient logtoClient; |
125 |
| -
|
126 |
| -void _init() async { |
127 |
| - logtoClient = LogtoClient( |
128 |
| - config: config, // LogtoConfig |
129 |
| - httpClient: http.Client(), // Optional http client |
130 |
| - ); |
131 |
| -} |
132 |
| -
|
133 |
| -void signIn() async { |
134 |
| - await logtoClient.signIn(redirectUri); |
135 |
| -} |
136 |
| -
|
137 |
| -void signOut() async { |
138 |
| - await logtoClient.signOut(); |
139 |
| -} |
140 |
| -
|
141 |
| -``` |
142 |
| - |
143 |
| -### Class LogtoConfig |
144 |
| - |
145 |
| -#### Properties |
146 |
| - |
147 |
| -| name | type | description | |
148 |
| -| --------- | --------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | |
149 |
| -| appId | String | Your appId generate from Logto's admin console | |
150 |
| -| appSecret | String? | App Secret generated along with the appId. Optional for native apps. | |
151 |
| -| endpoint | String | Your logto server endpoint. e.g. https://logto.dev | |
152 |
| -| scopes | List<String>? | List all the permission scopes your app will request for. You may define and find it through Logto's admin console. | |
153 |
| -| resources | List<String>? | List all the [resource indicators](https://docs.logto.io/docs/references/resources/) you app may request for access. You may define and find it through Logto's admin console. | |
154 |
| - |
155 |
| -### Class LogtoClient |
156 |
| - |
157 |
| -#### Properties |
158 |
| - |
159 |
| -| name | type | description | |
160 |
| -| --------------- | --------------------------------------- | ----------------------------------------------- | |
161 |
| -| config | final LogtoConfig | Logto Config used to init Logto Client | |
162 |
| -| idToken | read-only Future<String?> | idToken returned after success authentication | |
163 |
| -| isAuthenticated | read-only Future<bool> | Is Authenticated status | |
164 |
| -| idTokenClaims | read-only Future<OpenIdClaims?> | Decoded idToken claims including basic userinfo | |
165 |
| -| loading | read-only bool | Global API loading status | |
166 |
| - |
167 |
| -#### Methods |
168 |
| - |
169 |
| -| name | type | description | |
170 |
| -| -------------- | --------------------------------------------------- | ------------------------------------------------------------------- | |
171 |
| -| getAccessToken | ({String? resource}) -> Future<AccessToken> | Request for an api resource specific access token for authorization | |
172 |
| -| signIn | (String? redirectUri) -> Future<void> | Init user sign-in flow | |
173 |
| -| signOut | () -> Future<void> | Sign-out | |
174 |
| -| getUserInfo | () => Future<UserInfo> | Get user info | |
| 28 | +[Flutter SDK tutorial](https://docs.logto.io/sdk/flutter/) |
0 commit comments