Flutter钉钉集成插件flutter_dingtalk_sdk的使用

Flutter钉钉集成插件flutter_dingtalk_sdk的使用

flutter_dingtalk_sdk 是一个钉钉的SDK插件,允许开发者调用钉钉的原生SDK。

安装

pubspec.yaml 文件中添加 flutter_dingtalk_sdk 依赖:

dependencies:
  flutter_dingtalk_sdk: ^1.0.4

Android配置

build.gradle 文件中添加以下内容:

buildscript {
    dependencies {
        classpath 'com.android.tools.build:gradle:4.1.0'
    }
}

iOS配置

在Xcode中,选择你的项目设置,选择目标,在信息标签页下的URL类型中,添加钉钉应用ID作为URL Scheme。

URL Types
tencent: identifier=tencent schemes=appId

Info.plist 中添加以下内容以检查其他应用程序是否已安装:

<key>LSApplicationQueriesSchemes</key>
<array>
  <string>dingtalk</string>
  <string>dingtalk-open</string>
  <string>dingtalk-sso</string>
</array>

确保Flutter版本

确保你使用的Flutter版本与插件兼容:

Flutter 2.2.2 • channel stable nullsafety
Framework • revision d79295af24 (9天前) • 2021-06-11 08:56:01 -0700
Engine • revision 91c9fc8fe0
Tools • Dart 2.13.3

功能说明

  • 分享图片、文字、音乐、视频等。
  • 钉钉登录。
  • 打开钉钉应用。

准备工作

在集成之前,建议阅读官方文档以了解更多信息。

注册应用

通过 FluDing 注册应用:

FluDing.registerApp("dingu6xwfjbghhqtwwzu");

对于Android,查看文章以了解如何获取应用签名。然后你需要知道发布版和调试版应用签名的区别。如果签名不正确,可能会收到错误 errCode = -1

文档说明

更多功能可以查看源代码。

常见问题

这些问题可能对你有帮助

示例代码

以下是完整的示例代码:

import 'package:flutter_dingtalk_sdk/response/dingtalk_response.dart';
import 'package:flutter/material.dart';
import 'dart:async';

import 'package:flutter/services.dart';
import 'package:flutter_dingtalk_sdk/flutter_dingtalk_sdk.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatefulWidget {
  [@override](/user/override)
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  String _dingtalkVersion = '未知';

  [@override](/user/override)
  void initState() {
    super.initState();
    initPlatformState();

    FluDingtalk.ddResponseEventHandler.listen(dingtalkResponseEvent);
  }

  Future<void> initPlatformState() async {
    String dingtalkVersion;
    try {
      dingtalkVersion = await FluDingtalk.openAPIVersion;
      print("钉钉SDK: ===》 versionSDK: $dingtalkVersion");
      bool isSupport = await FluDingtalk.registerApp(
          "dingcxbptovsyu1lmth0", "com.example.flu_dingtalk_example");
      print("注册成功: $isSupport");
    } on PlatformException {
      dingtalkVersion = '获取平台版本失败。';
    }
    if (!mounted) return;

    setState(() {
      _dingtalkVersion = dingtalkVersion;
    });
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('钉钉SDK演示'),
        ),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: [
              Text('dingtalkVersion: $_dingtalkVersion\n'),
              TextButton(
                onPressed: () {
                  FluDingtalk.isDingDingInstalled().then((value) {
                    print("是否安装了钉钉: $value");
                  });
                },
                child: Text('isDingDingInstalled'),
              ),
              TextButton(
                onPressed: () {
                  FluDingtalk.isDingTalkSupportSSO.then((value) {
                    print("是否支持登录: $value");
                  });
                },
                child: Text('isDingTalkSupportSSO'),
              ),
              TextButton(
                onPressed: () {
                  FluDingtalk.openDingTalk
                      .then((value) => print("打开钉钉App: $value"));
                },
                child: Text('openDingTalk'),
              ),
              TextButton(
                onPressed: () {
                  FluDingtalk.sendAuth("Auth").then(
                    (value) => print("打开钉钉登录: $value"),
                  );
                },
                child: Text('sendAuthDingTalk'),
              ),
              TextButton(
                onPressed: () {
                  FluDingtalk.sendTextMessage('分享文本');
                },
                child: Text('shareText'),
              ),
              TextButton(
                onPressed: () {
                  FluDingtalk.sendImageMessage(
                      picUrl:
                          'https://www.baidu.com/img/PCtm_d9c8750bed0b3c7d089fa7d55720d6cf.png');
                },
                child: Text('shareImage'),
              ),
              TextButton(
                onPressed: () {
                  FluDingtalk.sendWebPageMessage(
                    'https://www.baidu.com/',
                    title: '标题',
                    content: '描述2333',
                    thumbUrl:
                        'https://www.baidu.com/img/PCtm_d9c8750bed0b3c7d089fa7d55720d6cf.png',
                  );
                },
                child: Text('shareWebPage'),
              ),
            ],
          ),
        ),
      ),
    );
  }

  // 钉钉回调监听
  void dingtalkResponseEvent(event) {
    if (event is DDShareAuthResponse) {
      var response = event;
      if (response.code.isNotEmpty) {
        print("OAuthCode: ${response.code}");
      } else {
        print(response.mErrStr);
      }
    }
  }
}

更多关于Flutter钉钉集成插件flutter_dingtalk_sdk的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter钉钉集成插件flutter_dingtalk_sdk的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


flutter_dingtalk_sdk 是一个用于在 Flutter 应用中集成钉钉功能的插件。通过该插件,你可以实现诸如钉钉登录、分享、支付等功能。以下是如何使用 flutter_dingtalk_sdk 的基本步骤:

1. 添加依赖

首先,在 pubspec.yaml 文件中添加 flutter_dingtalk_sdk 依赖:

dependencies:
  flutter:
    sdk: flutter
  flutter_dingtalk_sdk: ^1.0.0  # 请使用最新版本

然后运行 flutter pub get 来获取依赖。

2. 配置钉钉应用

在钉钉开放平台上注册应用,并获取 AppIdAppSecret。你还需要配置应用的包名和签名信息。

3. 初始化 SDK

在你的 Flutter 应用中初始化钉钉 SDK。通常在 main.dart 中进行初始化:

import 'package:flutter_dingtalk_sdk/flutter_dingtalk_sdk.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  
  // 初始化钉钉 SDK
  await FlutterDingtalkSdk.init(
    appId: 'your_app_id',
    appSecret: 'your_app_secret',
  );
  
  runApp(MyApp());
}

4. 实现钉钉登录

使用 FlutterDingtalkSdk 实现钉钉登录功能:

import 'package:flutter/material.dart';
import 'package:flutter_dingtalk_sdk/flutter_dingtalk_sdk.dart';

class LoginPage extends StatelessWidget {
  Future<void> _loginWithDingtalk() async {
    try {
      final authCode = await FlutterDingtalkSdk.login();
      print('Auth Code: $authCode');
      // 使用 authCode 向你的服务器请求用户信息
    } catch (e) {
      print('Login failed: $e');
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('钉钉登录'),
      ),
      body: Center(
        child: ElevatedButton(
          onPressed: _loginWithDingtalk,
          child: Text('钉钉登录'),
        ),
      ),
    );
  }
}

5. 实现分享功能

使用 FlutterDingtalkSdk 实现分享功能:

import 'package:flutter/material.dart';
import 'package:flutter_dingtalk_sdk/flutter_dingtalk_sdk.dart';

class SharePage extends StatelessWidget {
  Future<void> _shareToDingtalk() async {
    try {
      await FlutterDingtalkSdk.share(
        title: '分享标题',
        content: '分享内容',
        url: 'https://www.example.com',
        imageUrl: 'https://www.example.com/image.png',
      );
      print('分享成功');
    } catch (e) {
      print('分享失败: $e');
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('分享到钉钉'),
      ),
      body: Center(
        child: ElevatedButton(
          onPressed: _shareToDingtalk,
          child: Text('分享到钉钉'),
        ),
      ),
    );
  }
}

6. 实现支付功能

使用 FlutterDingtalkSdk 实现支付功能:

import 'package:flutter/material.dart';
import 'package:flutter_dingtalk_sdk/flutter_dingtalk_sdk.dart';

class PaymentPage extends StatelessWidget {
  Future<void> _payWithDingtalk() async {
    try {
      await FlutterDingtalkSdk.pay(
        orderId: 'your_order_id',
        amount: '100',  // 金额,单位:分
      );
      print('支付成功');
    } catch (e) {
      print('支付失败: $e');
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('钉钉支付'),
      ),
      body: Center(
        child: ElevatedButton(
          onPressed: _payWithDingtalk,
          child: Text('钉钉支付'),
        ),
      ),
    );
  }
}

7. 处理回调

在某些情况下,你可能需要处理钉钉 SDK 的回调。你可以在 init 方法中设置回调:

await FlutterDingtalkSdk.init(
  appId: 'your_app_id',
  appSecret: 'your_app_secret',
  onAuthResponse: (response) {
    // 处理登录回调
  },
  onShareResponse: (response) {
    // 处理分享回调
  },
  onPayResponse: (response) {
    // 处理支付回调
  },
);
回到顶部