mirror of
https://github.com/logto-io/logto.git
synced 2024-12-16 20:26:19 -05:00
feat(console): add flutter guide (#4338)
* feat(console): add flutter guide add flutter guide * fix: should read props should read props * fix: remove useless content remove useless content * fix(console): update flutter SDK content update flutter SDK content
This commit is contained in:
parent
59a42c76c5
commit
758510a13f
1 changed files with 196 additions and 1 deletions
|
@ -1 +1,196 @@
|
||||||
## Replace this with actual guide
|
import UriInputField from '@/mdx-components-v2/UriInputField';
|
||||||
|
import Steps from '@/mdx-components-v2/Steps';
|
||||||
|
import Step from '@/mdx-components-v2/Step';
|
||||||
|
import Tabs from '@mdx/components/Tabs';
|
||||||
|
import TabItem from '@mdx/components/TabItem';
|
||||||
|
import InlineNotification from '@/ds-components/InlineNotification';
|
||||||
|
|
||||||
|
<Steps>
|
||||||
|
<Step title="Install Logto SDK">
|
||||||
|
|
||||||
|
Our flutter SDK package is published on [pub.dev](https://pub.dev/packages/logto_dart_sdk). Install the SDK package by running the following command in your project directory:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
flutter pub get logto_dart_sdk
|
||||||
|
```
|
||||||
|
|
||||||
|
</Step>
|
||||||
|
<Step title="Dependency settings" subtitle="2 steps">
|
||||||
|
<details>
|
||||||
|
|
||||||
|
<summary>flutter_secure_storage</summary>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
|
||||||
|
We use [flutter_secure_storage](https://pub.dev/packages/flutter_secure_storage) to implement the cross-platform persistent secure token storage.
|
||||||
|
|
||||||
|
- Keychain is used for iOS
|
||||||
|
- AES encryption is used for Android.
|
||||||
|
|
||||||
|
### Config Android version:
|
||||||
|
|
||||||
|
In `[project]/android/app/build.gradle` set minSdkVersion to >= 18.
|
||||||
|
|
||||||
|
```gradle
|
||||||
|
android {
|
||||||
|
...
|
||||||
|
|
||||||
|
defaultConfig {
|
||||||
|
...
|
||||||
|
minSdkVersion 18
|
||||||
|
...
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
<InlineNotification>
|
||||||
|
|
||||||
|
By default Android backups data on Google Drive. It can cause exception `java.security.InvalidKeyException:Failed` to unwrap key. You will need to:
|
||||||
|
|
||||||
|
- Disable `autobackup`;
|
||||||
|
- Exclude `sharedprefs` FlutterSecureStorage used by the plugin;
|
||||||
|
|
||||||
|
</InlineNotification>
|
||||||
|
|
||||||
|
1. To disable `autobackup`, go to your app manifest file and set the boolean value `android:allowBackup`:
|
||||||
|
|
||||||
|
```xml
|
||||||
|
<manifest ... >
|
||||||
|
...
|
||||||
|
<application
|
||||||
|
android:allowBackup="false"
|
||||||
|
android:fullBackupContent="false"
|
||||||
|
...
|
||||||
|
>
|
||||||
|
...
|
||||||
|
</application>
|
||||||
|
</manifest>
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
2. Exclude `sharedprefs` FlutterSecureStorage.
|
||||||
|
|
||||||
|
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:
|
||||||
|
|
||||||
|
```xml
|
||||||
|
<application ...
|
||||||
|
android:fullBackupContent="@xml/backup_rules">
|
||||||
|
</application>
|
||||||
|
```
|
||||||
|
|
||||||
|
```xml
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<full-backup-content>
|
||||||
|
<exclude domain="sharedpref" path="FlutterSecureStorage"/>
|
||||||
|
</full-backup-content>
|
||||||
|
```
|
||||||
|
|
||||||
|
Please check [flutter_secure_storage](https://pub.dev/packages/flutter_secure_storage#configure-android-version) for more details.
|
||||||
|
|
||||||
|
</p>
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
|
<details>
|
||||||
|
|
||||||
|
<summary>flutter_web_auth</summary>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
|
||||||
|
[flutter_web_auth](https://pub.dev/packages/flutter_web_auth) is used behind Logto's flutter SDK. We rely on its webview-based interaction interface to open Logto's authorization pages.
|
||||||
|
|
||||||
|
<InlineNotification>
|
||||||
|
|
||||||
|
Under the hood, 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.
|
||||||
|
|
||||||
|
</InlineNotification>
|
||||||
|
|
||||||
|
Andorid:
|
||||||
|
|
||||||
|
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`.
|
||||||
|
|
||||||
|
```xml
|
||||||
|
<activity android:name="com.linusu.flutter_web_auth.CallbackActivity" android:exported="false">
|
||||||
|
<intent-filter android:label="flutter_web_auth">
|
||||||
|
<action android:name="android.intent.action.VIEW"/>
|
||||||
|
<category android:name="android.intent.category.DEFAULT"/>
|
||||||
|
<category android:name="android.intent.category.BROWSABLE"/>
|
||||||
|
<data android:scheme="io.logto"/>
|
||||||
|
</intent-filter>
|
||||||
|
</activity>
|
||||||
|
```
|
||||||
|
|
||||||
|
</p>
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
|
</Step>
|
||||||
|
<Step title="Init LogtoClient" subtitle="1 step">
|
||||||
|
|
||||||
|
<pre>
|
||||||
|
<code className="language-dart">
|
||||||
|
{`
|
||||||
|
import 'package:logto_dart_sdk/logto_dart_sdk.dart';
|
||||||
|
import 'package:http/http.dart' as http;
|
||||||
|
|
||||||
|
late LogtoClient logtoClient;
|
||||||
|
|
||||||
|
// LogtoConfig
|
||||||
|
final logtoConfig = const LogtoConfig(
|
||||||
|
endpoint: '${props.endpoint}',${
|
||||||
|
props.alternativeEndpoint ? ` // or "${props.alternativeEndpoint}"` : ''
|
||||||
|
}
|
||||||
|
appId: '${props.app.id}',
|
||||||
|
);
|
||||||
|
|
||||||
|
void init() async {
|
||||||
|
logtoClient = LogtoClient(
|
||||||
|
config: logtoConfig,
|
||||||
|
httpClient: http.Client(), // Optional http client
|
||||||
|
);
|
||||||
|
}
|
||||||
|
`}
|
||||||
|
</code>
|
||||||
|
</pre>
|
||||||
|
|
||||||
|
</Step>
|
||||||
|
<Step title="Sign In" subtitle="2 steps">
|
||||||
|
|
||||||
|
### Configure Redirect URI
|
||||||
|
|
||||||
|
<InlineNotification>
|
||||||
|
In the following steps, we assume your app has configured using `io.logo` as your schema .
|
||||||
|
</InlineNotification>
|
||||||
|
|
||||||
|
Let's switch to the Application details page of Logto Admin Console. Add a Redirect URI `io.logto://callback` and click "Save Changes".
|
||||||
|
|
||||||
|
<UriInputField name="redirectUris" />
|
||||||
|
|
||||||
|
### Implement a sign-in method
|
||||||
|
|
||||||
|
<pre>
|
||||||
|
<code className="language-dart">
|
||||||
|
{`void signIn() async {
|
||||||
|
await logtoClient.signIn('${props.redirectUris[0] ?? 'io.logto://callback'}');
|
||||||
|
}
|
||||||
|
`}
|
||||||
|
</code>
|
||||||
|
</pre>
|
||||||
|
|
||||||
|
</Step>
|
||||||
|
|
||||||
|
<Step title="Sign Out" subtitle="1 step">
|
||||||
|
|
||||||
|
Calling `.signOut()` will clean all the Logto data in the secret storage, if it has.
|
||||||
|
|
||||||
|
```dart
|
||||||
|
void signOut() async {
|
||||||
|
await logtoClient.signOut();
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
</Step>
|
||||||
|
|
||||||
|
</Steps>
|
||||||
|
|
Loading…
Reference in a new issue