legato_centralize_deep_link 0.0.3 legato_centralize_deep_link: ^0.0.3 copied to clipboard
Centralize deep link
Centralize Deep Link Plugin for Flutter #
A Flutter plugin for generating and managing centralized deep link URLs. This library provides methods to create a centralized deep link URL and to extract tokens from it, enabling smooth and secure navigation within your Flutter app.
Features #
- Generate Centralized Deep Link URL: Create a URL that links to specific content or features in your app.
- Extract Token from Deep Link URL: Retrieve a unique token from the deep link URL, which can then be used to query metadata and perform additional actions.
Installation #
To install this plugin, add it as a dependency in your pubspec.yaml
file:
dependencies:
centralize_deep_link_plugin: ^1.0.0
Here's the raw code for the README in Markdown format:
markdown Copy code
Centralize Deep Link Plugin for Flutter #
A Flutter plugin for generating and managing centralized deep link URLs. This library provides methods to create a centralized deep link URL and to extract tokens from it, enabling smooth and secure navigation within your Flutter app.
Features #
- Generate Centralized Deep Link URL: Create a URL that links to specific content or features in your app.
- Extract Token from Deep Link URL: Retrieve a unique token from the deep link URL, which can then be used to query metadata and perform additional actions.
Handling Multiple Deep Link Formats #
This plugin supports two formats for deep links:
- Format 1:
https://{deeplinkdev-dynamic-csw.legato.co}/{token}
using for most of the case - Format 2:
https://{deeplinkdev-dynamic-keeper.legato.co}/token/{token}
using when user install new app from store, and open the application via store.
Installation #
To install this plugin, add it as a dependency in your pubspec.yaml
file:
dependencies:
centralize_deep_link_plugin: ^1.0.0
Then, run:
flutter pub get
Usage Import the library:
import 'package:centralize_deep_link_plugin/centralize_deep_link_plugin.dart';
Generate Centralized Deep Link URL To create a centralized deep link URL, use the generateDeepLink method. This method takes a token and returns a URL that can be shared or used to navigate to specific content within the app.
final _config = const DeepLinkConfiguration(
projectId: '{PROJECT_ID}',
apiKey: '{API_KEY}',
secret: '{SECRET}');
final _env = DeepLinkEnvironment.dev;
Future<void> _generateDeepLink() async {
String generateLink;
// Platform messages may fail, so we use a try/catch PlatformException.
// We also handle the message potentially returning null.
try {
generateLink = await DeepLink().generateDeepLink(
_config,
_env,
const GenerateLinkRequest(metadata: {
"page_type": "product",
"page_id": 1,
"page_title": "Aliquam erat volutpat."
}, pageUrl: 'https://placeholder.com/'));
} on PlatformException {
generateLink = 'Failed to generate deep link';
} on Exception {
generateLink = 'On Exception';
}
// If the widget was removed from the tree while the asynchronous platform
// message was in flight, we want to discard the reply rather than calling
// setState to update our non-existent appearance.
if (!mounted) return;
setState(() {
_deepLink = generateLink;
});
}
Extract Token from Deep Link URL To extract the token from a deep link URL, use the extractTokenFromUrl method. This will return the meta data, which can be used to query or perform other actions.
import 'package:deep_link/deep_link.dart';
final _config = const DeepLinkConfiguration(
projectId: '{PROJECT_ID}',
apiKey: '{API_KEY}',
secret: '{SECRET}');
final _env = DeepLinkEnvironment.dev;
Future<void> _extraMetadata(String token) async {
Map<String, dynamic> metaData = {};
// Platform messages may fail, so we use a try/catch PlatformException.
// We also handle the message potentially returning null.
try {
final metaRequest = {
'is_click': false,
'is_redirect': true,
'is_flutter': true
};
metaData = await DeepLink().extractLinkMetaData(_config, _env, token,
metaData: metaRequest);
} on PlatformException {
_metaData = 'Failed to generate deep link';
} on Exception {
_metaData = 'On Exception';
}
// If the widget was removed from the tree while the asynchronous platform
// message was in flight, we want to discard the reply rather than calling
// setState to update our non-existent appearance.
if (!mounted) return;
setState(() {
_metaData = jsonEncode(metaData);
});
}
Android Configuration #
To handle deep links on Android, add the following intent filter in your AndroidManifest.xml
file under the <activity>
tag for your main activity.
Step 1: Add Deep Link Configuration #
<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="https" />
<data android:host="@string/centralize_host" />
</intent-filter>
<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="https" />
<data android:host="@string/centralize_host" />
<data android:pathPrefix="/token" />
</intent-filter>
Step 2: Define centralize_host in res/values/strings.xml #
Open the res/values/strings.xml file and add the following line:
<string name="centralize_host">deeplinkdev-dynamic-{name}.legato.co</string>