Flutter社交媒体分享插件md_insta_fb_share的使用

Flutter社交媒体分享插件md_insta_fb_share的使用

获取开始

这个项目是一个用于开发跨平台应用的 Flutter 插件包,包括针对 Android 和/或 iOS 的平台特定实现代码。

要开始使用 Flutter,可以查看我们的在线文档,它提供了教程、示例、移动开发指南和完整的 API 参考。

MdInstaFbShare

这是一个 Flutter 插件,允许用户将图片分享到 Instagram 或 Facebook。

示例

要使用此插件,请将依赖项添加到 pubspec.yaml 文件中:

dependencies:
  flutter:
    sdk: flutter
  md_insta_fb_share:

示例代码

以下是一个完整的示例代码,展示了如何使用该插件进行分享操作:

import 'dart:io';
import 'package:flutter/material.dart';
import 'package:internet_connection_checker/internet_connection_checker.dart';
import 'package:md_insta_fb_share/md_insta_fb_share.dart';
import 'package:path_provider/path_provider.dart';
import 'package:flutter/services.dart' show rootBundle;

void main() {
  WidgetsFlutterBinding.ensureInitialized();
  runApp(const MyApp());
}

class MyApp extends StatefulWidget {
  const MyApp({Key? key}) : super(key: key);

  @override
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  final scaffoldMessengerKey = GlobalKey<ScaffoldMessengerState>();

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: ScaffoldMessenger(
        key: scaffoldMessengerKey,
        child: Scaffold(
          appBar: AppBar(
            title: const Text('插件示例应用'),
          ),
          body: Center(
              child: Column(
                children: [
                  ElevatedButton(
                      onPressed: () async {
                        final dir = (await getTemporaryDirectory()).path;

                        final data = await rootBundle.load('assets/insta_big.png');
                        final buffer = data.buffer;
                        final fileName = 'insta_big-${DateTime.now().millisecondsSinceEpoch}.png';
                        final file = await File('$dir/$fileName').writeAsBytes(
                            buffer.asUint8List(data.offsetInBytes, data.lengthInBytes));

                        print(await MdInstaFbShare.shareInstaStory(file.path));
                      },
                      child: const Text('测试 Instagram 故事分享')
                  ),
                  ElevatedButton(
                      onPressed: () async {
                        final dir = (await getTemporaryDirectory()).path;

                        final data = await rootBundle.load('assets/insta_big.png');
                        final buffer = data.buffer;
                        final fileName = 'insta_big-${DateTime.now().millisecondsSinceEpoch}.png';
                        final file = await File('$dir/$fileName').writeAsBytes(
                            buffer.asUint8List(data.offsetInBytes, data.lengthInBytes));

                        print(await MdInstaFbShare.shareInstaFeed(file.path));
                      },
                      child: const Text('测试 Instagram 动态分享')
                  ),
                  ElevatedButton(
                      onPressed: () async {
                        final dir = (await getTemporaryDirectory()).path;

                        final data = await rootBundle.load('assets/insta_big.png');
                        final buffer = data.buffer;
                        final fileName = 'insta_big-${DateTime.now().millisecondsSinceEpoch}.png';
                        final file = await File('$dir/$fileName').writeAsBytes(
                            buffer.asUint8List(data.offsetInBytes, data.lengthInBytes));
                        print(await MdInstaFbShare.shareFBStory(file.path));
                      },
                      child: const Text('测试 Facebook 故事分享')
                  ),
                  ElevatedButton(
                      onPressed: () async {
                        final dir = (await getTemporaryDirectory()).path;

                        final data = await rootBundle.load('assets/insta_big.png');
                        final buffer = data.buffer;
                        final fileName = 'insta_big-${DateTime.now().millisecondsSinceEpoch}.png';
                        final file = await File('$dir/$fileName').writeAsBytes(
                            buffer.asUint8List(data.offsetInBytes, data.lengthInBytes));
                        if (await InternetConnectionChecker().hasConnection) {
                          print(await MdInstaFbShare.shareFBFeed(file.path));
                        } else {
                          scaffoldMessengerKey.currentState?.showSnackBar(const SnackBar(content: Text('互联网连接错误')));
                        }
                      },
                      child: const Text('测试 Facebook 动态分享')
                  ),
                  Image.asset('assets/insta_big.png', width: 150, fit: BoxFit.fitWidth),
                  Row(
                    children: [
                      const Text('Facebook 应用可用: '),
                      FutureBuilder(
                        future: MdInstaFbShare.checkFBInstalled(),
                        builder: (_, snapshot) {
                          if (snapshot.hasData) {
                            return Text('${snapshot.data}');
                          }
                          return Container();
                        },
                      )
                    ],
                  ),
                  Row(
                    children: [
                      const Text('Instagram 应用可用: '),
                      FutureBuilder(
                        future: MdInstaFbShare.checkInstaInstalled(),
                        builder: (_, snapshot) {
                          if (snapshot.hasData) {
                            return Text('${snapshot.data}');
                          }
                          return Container();
                        },
                      )
                    ],
                  )
                ],
              )
          ),
        ),
      ),
    );
  }
}

分享方法返回值

MdInstaFbShare 类的分享方法返回 ShareStatus 枚举类型,可能的值有:

enum ShareStatus {
  success, // 资源成功发送到分享应用(分享应用可能没有权限,可能会在分享应用内部抛出错误)
  appCanNotBeOpenedError,  // 由于某些原因无法打开分享应用(应用会在商店中打开)
  imageNotFoundError, // 无法找到资源
  galleryAccessError, // 无法保存图像到图像库(需要用于 Instagram 动态分享)
  unknownError // 未知错误
}

iOS 配置

在 Info.plist 中添加以下配置:

<key>FacebookAppID</key>
<string>{Your-FB-APP-ID}</string>
<key>CFBundleURLTypes</key>
<array>
  <dict>
    <key>CFBundleURLSchemes</key>
    <array>
      <string>fb{Your-FB-APP-ID}</string>
    </array>
  </dict>
</array>
<key>LSApplicationQueriesSchemes</key>
<array>
  <string>instagram-stories</string>
  <string>facebook-stories</string>
  <string>facebook</string>
  <string>instagram</string>
  <string>fbauth2</string>
  <string>fbauth2</string>
  <string>fbapi</string>
  <string>fbapi20130214</string>
  <string>fbapi20130410</string>
  <string>fbapi20130702</string>
  <string>fbapi20131010</string>
  <string>fbapi20131219</string>
  <string>fbapi20140410</string>
  <string>fbapi20140116</string>
  <string>fbapi20150313</string>
  <string>fbapi20150629</string>
  <string>fbapi20160328</string>
  <string>fbauth</string>
  <string>fbauth2</string>
  <string>fbshareextension</string>
</array>
<key>NSPhotoLibraryUsageDescription</key>
<string>Allow access to photo library</string>
<key>NSPhotoLibraryAddUsageDescription</key>
<string>Allow access to photo library</string>

AppDelegate.swift 中添加以下代码:

import UIKit
import Flutter
import FBSDKCoreKit

@UIApplicationMain
@objc class AppDelegate: FlutterAppDelegate {
  override func application(
    _ application: UIApplication,
    didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
  ) -&gt; Bool {
    GeneratedPluginRegistrant.register(with: self)
    ApplicationDelegate.shared.initializeSDK();
    return super.application(application, didFinishLaunchingWithOptions: launchOptions)
  }
}

Android 配置

/android/src/main/AndroidManifest.xml 中添加以下配置:

<application>
  <!--你的代码-->
  <provider android:authorities="com.facebook.app.FacebookContentProvider{Your-FB-APP-ID}"
            android:name="com.facebook.FacebookContentProvider"
            android:exported="true"/>
  <meta-data
          android:name="com.facebook.sdk.ApplicationId"
          android:value="@string/facebook_app_id" />
  <!--你的代码-->
</application>

app/src/main/res/values/strings.xml 中添加以下配置:

<string name="facebook_app_id">{Your FB app ID}</string>

app/src/main/build.gradle 中添加以下依赖:

dependencies {
    implementation 'com.facebook.android:facebook-share:latest.release'
}

分享 Facebook 动态

分享 Facebook 动态需要有效的互联网连接,如果没有互联网连接,则不会发生任何事情。你可以使用 internet_connection_checker 库来检查互联网连接是否可用。

示例代码:

if(await InternetConnectionChecker().hasConnection) {
  print(await MdInstaFbShare.shareFBFeed(file.path));
} else {
  // 你的操作
}

更多关于Flutter社交媒体分享插件md_insta_fb_share的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter社交媒体分享插件md_insta_fb_share的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


Flutter 是一个功能强大的跨平台移动应用开发框架,而 md_insta_fb_share 是一个可以帮助你在 Flutter 应用中实现社交媒体分享功能的插件。通过这个插件,你可以轻松地将内容分享到 Instagram 和 Facebook 等平台。

以下是如何在 Flutter 项目中使用 md_insta_fb_share 插件的详细步骤:

1. 添加依赖

首先,你需要在 pubspec.yaml 文件中添加 md_insta_fb_share 插件的依赖:

dependencies:
  flutter:
    sdk: flutter
  md_insta_fb_share: ^1.0.0

然后,运行 flutter pub get 来安装依赖。

2. 导入插件

在需要使用插件的地方导入 md_insta_fb_share

import 'package:md_insta_fb_share/md_insta_fb_share.dart';

3. 使用插件进行分享

md_insta_fb_share 插件提供了简单的 API 来分享内容到 Instagram 和 Facebook。

分享到 Instagram

void shareToInstagram() async {
  try {
    await MdInstaFbShare.shareToInstagram(
      imagePath: 'assets/image.png', // 图片路径
      caption: 'Check out this image!', // 标题
    );
  } catch (e) {
    print('Failed to share to Instagram: $e');
  }
}

分享到 Facebook

void shareToFacebook() async {
  try {
    await MdInstaFbShare.shareToFacebook(
      imagePath: 'assets/image.png', // 图片路径
      caption: 'Check out this image!', // 标题
    );
  } catch (e) {
    print('Failed to share to Facebook: $e');
  }
}

4. 处理权限

在某些情况下,分享操作需要用户授予权限。你需要在 AndroidManifest.xmlInfo.plist 文件中添加相应的权限配置。

Android

AndroidManifest.xml 中添加以下权限:

<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

iOS

Info.plist 中添加以下权限:

<key>NSPhotoLibraryUsageDescription</key>
<string>We need access to your photos to share images.</string>
回到顶部