Flutter企业微信集成插件flutter_wxwork的使用
Flutter企业微信集成插件flutter_wxwork的使用
flutter_wxwork
是一个用于在 Flutter 应用中集成企业微信功能的插件。它支持登录授权和分享功能。
使用方式
引入插件
首先,在 pubspec.yaml
文件中添加依赖:
dependencies:
flutter_wxwork: ^latest_version
然后运行 flutter pub get
来安装插件。
导入插件
在 Dart 代码中导入插件:
import 'package:flutter_wxwork/flutter_wxwork.dart';
基本用法
判断是否安装企业微信
final _flutterWxworkPlugin = FlutterWxwork();
bool isInstall = await _flutterWxworkPlugin.isAppInstalled();
print('isInstall = $isInstall');
初始化
在调用授权之前,需要先进行初始化:
final result = await _flutterWxworkPlugin.register(
scheme: 'your_scheme',
corpId: 'your_corpId',
agentId: 'your_agentId'
);
print('register = $result');
调起授权
final result = await _flutterWxworkPlugin.auth();
print('auth = $result');
分享文本
_flutterWxworkPlugin.shareText('hello world');
iOS 配置
-
添加需要支持的白名单
在
ios/Runner/Info.plist
文件中增加LSApplicationQueriesSchemes
,并添加wxwork
:<key>LSApplicationQueriesSchemes</key> <array> <string>wxwork</string> </array>
-
配置 URL Schemes
在 XCode 中,选择你的工程设置项,选中“TARGETS”一栏,在“Info”标签栏的“URL Types”添加“URL Schemes”,其内容分别为你的
scheme
和corpId
。 -
解决
[+NSData wwkapi_nilobj]
错误打开 XCode 项目,进入
TARGETS -> Runner -> Build Settings -> Other Linker Flags
添加:$(inherited) -ObjC -l"WXWorkApi"
Android 配置
Android 11 及以上
在 android/src/main/AndroidManifest.xml
文件中添加:
<queries>
<package android:name="com.tencent.wework" /> <!-- 指定企业微信包名 -->
</queries>
混淆代码
如果需要混淆代码(release模式默认混淆),需要在 android/app
目录下加上 proguard-rules.pro
文件:
-keep class com.tencent.wework.api.** {*;}
网页端安卓签名获取
可以使用 安卓签名工具 获取签名。
示例代码
以下是一个完整的示例代码,展示了如何在 Flutter 应用中使用 flutter_wxwork
插件:
import 'dart:io';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_wxwork/flutter_wxwork.dart';
import 'package:image_picker/image_picker.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatefulWidget {
const MyApp({super.key});
@override
State<MyApp> createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
final _flutterWxworkPlugin = FlutterWxwork();
late BuildContext _builderContext;
bool isRegister = false;
final ImagePicker picker = ImagePicker();
@override
void initState() {
super.initState();
}
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: const Text('Plugin example app'),
),
body: Builder(builder: (context) {
_builderContext = context;
return Column(
children: [
_titleCell(
title: 'isAppInstalled',
onTap: () async {
bool isInstall = await _flutterWxworkPlugin.isAppInstalled();
_showMessage('isInstall = $isInstall');
},
),
_titleCell(
title: 'register',
onTap: () async {
isRegister = await _flutterWxworkPlugin.register(
scheme: 'wwauth8f1e80541af434bd000002',
corpId: 'ww8f1e80541af434bd',
agentId: '1000002',
);
_showMessage('register = $isRegister');
setState(() {});
},
),
if (isRegister)
Column(
children: [
_titleCell(
title: 'auth',
onTap: () async {
var result = await _flutterWxworkPlugin.auth();
_showMessage('auth = $result');
},
color: Colors.green,
),
_titleCell(
title: 'share text',
onTap: () async {
_flutterWxworkPlugin.shareText('text');
},
),
_titleCell(
title: 'share image',
onTap: () async {
final XFile? image = await picker.pickImage(source: ImageSource.gallery);
if (image == null) {
return;
}
Uint8List data = File(image.path).readAsBytesSync();
_flutterWxworkPlugin.shareImage(name: 'name', data: data);
},
),
_titleCell(
title: 'share link',
onTap: () async {
_flutterWxworkPlugin.shareLink(
title: 'example',
summary: 'this is test',
url: 'https://libin.zone',
icon: 'https://libin.zone/src/wechat_awatar.png',
);
},
),
],
)
],
);
}),
),
);
}
Widget _titleCell({
required String title,
void Function()? onTap,
Color? color,
}) {
return Padding(
padding: const EdgeInsets.all(8),
child: InkWell(
onTap: onTap,
child: Container(
height: 40,
width: double.infinity,
color: color ?? Colors.grey,
child: Center(
child: Text(
title,
style: const TextStyle(color: Colors.white),
),
),
),
),
);
}
void _showMessage(String message) {
if (!_builderContext.mounted) return;
ScaffoldMessenger.maybeOf(_builderContext)?.showSnackBar(SnackBar(
content: Text(message),
duration: const Duration(seconds: 1),
));
}
}
如果你觉得这个插件对你有帮助,欢迎给它一个 star,感谢支持!
更多关于Flutter企业微信集成插件flutter_wxwork的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter企业微信集成插件flutter_wxwork的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是一个关于如何在Flutter项目中集成并使用flutter_wxwork
插件的示例代码。这个插件允许Flutter应用与企业微信进行交互。
第一步:添加依赖
首先,你需要在你的pubspec.yaml
文件中添加flutter_wxwork
的依赖:
dependencies:
flutter:
sdk: flutter
flutter_wxwork: ^最新版本号 # 请替换为实际的最新版本号
然后运行flutter pub get
来安装依赖。
第二步:配置Android和iOS
Android配置
在android/app/src/main/AndroidManifest.xml
中添加必要的权限和配置:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.yourapp">
<!-- 其他配置 -->
<application
android:name="io.flutter.app.FlutterApplication"
android:label="yourapp"
android:icon="@mipmap/ic_launcher">
<!-- 添加企业微信所需的Activity配置 -->
<activity
android:name="io.github.ponnamkarthik.flutterwxwork.WXEntryActivity"
android:exported="true"
android:launchMode="singleTop"
android:theme="@android:style/Theme.Translucent.NoTitleBar">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<data android:scheme="your_scheme" /> <!-- 替换为你的scheme -->
</intent-filter>
</activity>
</application>
</manifest>
在android/app/build.gradle
中添加以下配置,以确保ProGuard不会混淆企业微信相关的类:
android {
...
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
// 添加以下规则
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-wxwork-rules.pro'
}
}
}
创建proguard-wxwork-rules.pro
文件,并添加以下内容:
-keep class com.tencent.mm.opensdk.** { *; }
-dontwarn com.tencent.mm.opensdk.**
iOS配置
在ios/Runner/Info.plist
中添加企业微信SDK所需的URL Scheme:
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleURLSchemes</key>
<array>
<string>your_scheme</string> <!-- 替换为你的scheme -->
</array>
</dict>
</array>
<key>LSApplicationQueriesSchemes</key>
<array>
<string>wxapi</string>
</array>
第三步:使用flutter_wxwork
插件
在你的Flutter项目中,你可以按照以下方式使用flutter_wxwork
插件:
import 'package:flutter/material.dart';
import 'package:flutter_wxwork/flutter_wxwork.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatefulWidget {
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
@override
void initState() {
super.initState();
// 初始化企业微信SDK
FlutterWxwork.registerApp(
corpId: '你的企业ID',
agentId: '你的应用AgentID',
timestamp: DateTime.now().millisecondsSinceEpoch,
nonceStr: '一个随机字符串',
signature: '签名', // 需要根据企业微信文档生成签名
);
}
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Flutter 企业微信集成示例'),
),
body: Center(
child: ElevatedButton(
onPressed: () async {
try {
// 发起企业微信登录
var result = await FlutterWxwork.login();
print('登录结果: $result');
} catch (e) {
print('登录失败: $e');
}
},
child: Text('企业微信登录'),
),
),
),
);
}
}
注意:
corpId
,agentId
,timestamp
,nonceStr
, 和signature
需要根据你的企业微信配置进行替换。特别是signature
,它通常需要根据企业微信提供的算法进行生成。- 具体的签名生成算法和更多企业微信SDK的使用方法,请参考企业微信官方文档。
这个示例展示了如何在Flutter应用中集成企业微信SDK,并发起登录请求。实际应用中,你可能需要处理更多的企业微信功能,如发送消息、获取用户信息等,这些都可以参考企业微信官方文档进行进一步开发。