Flutter企业微信集成插件flutter_wxwork的使用

发布于 1周前 作者 sinazl 来自 Flutter

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 配置

  1. 添加需要支持的白名单

    ios/Runner/Info.plist 文件中增加 LSApplicationQueriesSchemes,并添加 wxwork

    <key>LSApplicationQueriesSchemes</key>
    <array>
      <string>wxwork</string>
    </array>
    
  2. 配置 URL Schemes

    在 XCode 中,选择你的工程设置项,选中“TARGETS”一栏,在“Info”标签栏的“URL Types”添加“URL Schemes”,其内容分别为你的 schemecorpId

  3. 解决 [+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

1 回复

更多关于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,并发起登录请求。实际应用中,你可能需要处理更多的企业微信功能,如发送消息、获取用户信息等,这些都可以参考企业微信官方文档进行进一步开发。

回到顶部