Flutter链接管理插件jmlink_flutter_plugin的使用
Flutter链接管理插件jmlink_flutter_plugin的使用
安装
在工程 pubspec.yaml
文件中加入依赖项:
dependencies:
jmlink_flutter_plugin: 2.1.4
或者,如果你需要从GitHub拉取最新版本:
dependencies:
jmlink_flutter_plugin:
git:
url: git://github.com/jpush/jmlink-flutter-plugin.git
ref: master
配置
Android
- 在
/android/app/build.gradle
中添加以下代码:
android: {
....
defaultConfig {
applicationId "替换成自己应用 ID"
...
ndk {
// 选择要添加的对应 CPU 类型的 .so 库。
abiFilters 'armeabi', 'armeabi-v7a', 'x86', 'x86_64', 'mips', 'mips64', 'arm64-v8a'
}
manifestPlaceholders = [
JPUSH_PKGNAME : applicationId,
JPUSH_APPKEY : "appkey", // NOTE: JPush 上注册的包名对应的 Appkey.
JPUSH_CHANNEL : "developer-default", // 暂时填写默认值即可.
JMLINK_SCHEME: "your_scheme", // 设置跳转的scheme
]
}
}
- 在
/android/app/src/main/AndroidManifest.xml
中配置 scheme:
<!-- 将“your_scheme”替换为后台填写的 URI Scheme。-->
<activity android:name=".WelcomeActivity">
<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='${JMLINK_SCHEME}' />
</intent-filter>
</activity>
- 注意:配置完
scheme
之后,必须在WelcomeActivity
的onCreate
方法中执行JmlinkFlutterPlugin.setData
方法:
public class WelcomeActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
Log.d("| WelcomeActivity | - ", "onCreate:");
super.onCreate(savedInstanceState);
JmlinkFlutterPlugin.setData(getIntent().getData());
Intent intent = new Intent(this, MainActivity.class);
startActivity(intent);
finish();
}
protected void onDestroy() {
Log.d("| WelcomeActivity | - ", "onDestroy:");
super.onDestroy();
}
protected void onNewIntent(Intent intent) {
Log.d("| WelcomeActivity | - ", "onNewIntent:");
super.onNewIntent(intent);
setIntent(intent);
}
}
iOS
详细配置请参考 iOS指南。
-
配置App的URL Scheme
在Xcode中选中Target -> Info -> URL Types,配置URL Scheme(例如:
jmlink
)。在Safari中输入
URL Scheme://
(例如:jmlink://
),如果能够唤起App,说明该URL Scheme配置成功。 -
配置Universal Link
Universal Link是iOS9的一个新特性,通过它,App可以从微信等应用中直接跳转到App,实现一键直达。
示例代码
以下是一个完整的示例代码,展示了如何使用 jmlink_flutter_plugin
插件。
import 'package:flutter/material.dart';
import 'dart:async';
import 'package:jmlink_flutter_plugin/jmlink_flutter_plugin.dart';
void main() => runApp(MyApp());
class MyApp extends StatefulWidget {
[@override](/user/override)
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
final JmlinkFlutterPlugin jmlink = new JmlinkFlutterPlugin();
String _paramString = "param";
String _defaultMlinkMapString = "default handler";
String _milinkMapString = "key handler";
[@override](/user/override)
void initState() {
super.initState();
initPlatformState();
}
// 平台消息是异步的,所以我们初始化在异步方法中。
Future<void> initPlatformState() async {
JMLConfig config = new JMLConfig();
config.appKey = "e58a32cb3e4469ebf31867e5";
config.channel = "devloper-default"; // 初始化sdk, appKey 和 channel 只对ios设置有效
config.useIDFA = false;
config.isProduction = true;
config.debug = true;
jmlink.setup(config: config);
registerDefaultJMLinkHandler();
if (!mounted) return;
}
/// 注册默认的 handler
registerDefaultJMLinkHandler() {
// 监听默认的 mLink handler 回调
jmlink.addDefaultHandlerListener((Map jsonMap) {
print("监听到默认短链的 mLink handler 回调,回调参数为:${jsonMap.toString()}");
setState(() {
_defaultMlinkMapString = jsonMap.toString();
});
getJMLinkParam();
});
// 注册默认的 handler
jmlink.registerJMLinkDefaultHandler();
}
/// 获取无码邀请返回参数
getJMLinkParam() {
jmlink.getJMLinkParam().then((param) {
print("获取到无码邀请参数为: ${param.toString()}");
setState(() {
_paramString = param.toString();
});
});
}
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: const Text('Plugin example app'),
),
body: Column(
children: <Widget>[
new Text("默认的 mLink handler 回调:"),
new Container(
margin: EdgeInsets.all(5),
color: Colors.brown,
child: Text(_defaultMlinkMapString),
width: double.infinity,
height: 80,
),
new Text(" mLink handler 回调:"),
new Container(
margin: EdgeInsets.all(5),
color: Colors.brown,
child: Text(_milinkMapString),
width: double.infinity,
height: 80,
),
new Text("无码邀请返回参数:"),
new Container(
margin: EdgeInsets.all(5),
color: Colors.brown,
child: Text(_paramString),
width: double.infinity,
height: 80,
),
],
),
),
);
}
}
更多关于Flutter链接管理插件jmlink_flutter_plugin的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter链接管理插件jmlink_flutter_plugin的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是一个关于如何使用 jmlink_flutter_plugin
的代码示例。这个插件通常用于在 Flutter 应用中管理深层链接(deep linking)。下面是一个基本的实现示例,展示了如何集成和使用该插件。
1. 添加依赖
首先,你需要在 pubspec.yaml
文件中添加 jmlink_flutter_plugin
的依赖:
dependencies:
flutter:
sdk: flutter
jmlink_flutter_plugin: ^最新版本号 # 请替换为最新版本号
然后运行 flutter pub get
来获取依赖。
2. 配置 Android 和 iOS
确保在 AndroidManifest.xml
和 iOS 的 Info.plist
中配置了必要的 URL schemes 和其他深层链接相关的设置。具体配置步骤依赖于你的应用需求,这里不详细展开。
3. 初始化插件并监听链接
在你的 Flutter 应用中,初始化 jmlink_flutter_plugin
并监听链接事件。以下是一个基本的示例:
import 'package:flutter/material.dart';
import 'package:jmlink_flutter_plugin/jmlink_flutter_plugin.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatefulWidget {
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
final JmLinkFlutterPlugin _jmLinkPlugin = JmLinkFlutterPlugin();
@override
void initState() {
super.initState();
// 初始化插件
_jmLinkPlugin.init().then((_) {
// 监听链接事件
_jmLinkPlugin.addListener(_handleDeepLink);
});
}
@override
void dispose() {
// 移除监听器
_jmLinkPlugin.removeListener(_handleDeepLink);
super.dispose();
}
void _handleDeepLink(String link) {
// 处理接收到的深层链接
print('Received deep link: $link');
// 根据链接执行相应的操作,例如导航到特定页面
// Navigator.pushNamed(context, '/someRoute', arguments: {'link': link});
}
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Deep Link Handling Example'),
),
body: Center(
child: Text('Open the app with a deep link to see it in action!'),
),
),
);
}
}
4. 处理启动时的链接
如果你的应用是通过深层链接启动的,你可能还需要在应用启动时获取并处理该链接。可以在 main.dart
的 MyApp
类中添加以下代码:
void main() async {
WidgetsFlutterBinding.ensureInitialized();
// 尝试获取启动时的链接
final String initialLink = await _jmLinkPlugin.retrieveLaunchUrl();
if (initialLink != null) {
// 处理启动时的链接
print('Initial deep link: $initialLink');
// 可以在这里导航到特定页面或执行其他操作
}
runApp(MyApp(initialLink: initialLink));
}
class MyApp extends StatefulWidget {
final String? initialLink;
MyApp({this.initialLink});
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
// ... (其他代码保持不变)
@override
void initState() {
super.initState();
if (widget.initialLink != null) {
// 处理启动时的链接
_handleDeepLink(widget.initialLink!);
}
// 初始化插件并监听链接事件(代码保持不变)
_jmLinkPlugin.init().then((_) {
_jmLinkPlugin.addListener(_handleDeepLink);
});
}
// ... (其他代码保持不变)
}
这个示例展示了如何在 Flutter 应用中集成和使用 jmlink_flutter_plugin
来处理深层链接。请根据你的具体需求调整代码。