Flutter社交分享插件appinio_social_share_plus的使用
Flutter社交分享插件appinio_social_share_plus的使用
appinio_social_share_plus
是 appinio_social_share
的一个分叉版本,目的是添加对 LinkedIn 动态和聊天的支持,并增加将任何 HTML 消息自动解析为纯文本的功能。
主要分享功能
- Facebook 动态
- Facebook 故事
- Instagram 聊天
- Instagram 动态
- Instagram Reel
- Instagram 故事
- Messenger
- Telegram
- TikTok 状态
- TikTok 视频
- LinkedIn 动态
- LinkedIn 聊天
- 短信
- 系统分享表
- 复制到剪贴板
- 检查这些应用是否已安装
示例预览
Android

iOS

只需使用 AppinioSocialSharePlus
类并调用你想要分享的平台的方法。
Android 配置
在 AndroidManifest.xml
文件中的 manifest
标签内粘贴以下属性:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="your package...">
例如:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="your package...">
在 AndroidManifest.xml
中添加以下权限和查询:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="your package...">
<queries>
<!-- 显式指定已知的应用程序 -->
<package android:name="com.instagram.android" />
<package android:name="com.zhiliaoapp.musically" />
<package android:name="com.facebook.katana" />
<package android:name="com.facebook.orca" />
<package android:name="org.telegram.messenger" />
<package android:name="com.whatsapp" />
<package android:name="com.twitter.android" />
<package android:name="com.linkedin.android" />
<provider android:authorities="com.facebook.katana.provider.PlatformProvider" />
<provider android:authorities="com.facebook.orca.provider.PlatformProvider" />
</queries>
<uses-permission android:name="android.permission.READ_MEDIA_IMAGES" />
<uses-permission android:name="android.permission.READ_MEDIA_VIDEO" />
<uses-permission android:name="android.permission.READ_MEDIA_AUDIO" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"
android:maxSdkVersion="29" />
<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.INTERNET" />
</manifest>
注意事项
MANAGE_EXTERNAL_STORAGE
需要从 Google Play 商店获取额外的权限。创建一个 xml
文件夹并在 android/app/src/main/res
中添加一个名为 provider_paths.xml
的文件,并添加以下行:
<?xml version="1.0" encoding="utf-8"?>
<paths>
<external-path
name="external_files"
path="." />
</paths>
创建完自己的文件提供器并定义路径后,将其粘贴到此位置并添加到 AndroidManifest.xml
中:
<provider
android:name="com.appinio.socialshare.appinio_social_share.AppinioFileProvider"
android:authorities="${applicationId}.provider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/provider_paths"/>
</provider>
Facebook 应用注册
- 在
/android/app/src/main/values
文件夹中创建一个strings.xml
文件,并添加你的 Facebook 应用 ID 和 Facebook 客户端令牌。 - 要获取 Facebook 客户端令牌,请访问 Meta 开发者网站 (链接) 并导航至设置 > 高级 > 安全 > 应用程序代码。
- 要获取 Facebook 应用 ID,请遵循上述 Meta 链接并转到你的应用设置 > 基本信息 > 应用 ID。
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="facebook_app_id">[facebook_app_id]</string>
<string name="facebook_client_token">[facebook_client_token]</string>
</resources>
在 AndroidManifest.xml
的 application
标签内添加以下内容:
<provider android:name="com.facebook.FacebookContentProvider" android:authorities="com.facebook.app.FacebookContentProvider[facebook_app_id]"
android:exported="true" />
<metadata android:name="com.facebook.sdk.ApplicationId" android:value="@string/facebook_app_id" />
<metadata android:name="com.facebook.sdk.ClientToken" android:value="@string/facebook_client_token" />
<metadata android:name="com.facebook.sdk.ApplicationName" android:value="${applicationName}"/>
<activity android:name="com.facebook.FacebookActivity" android:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation" android:label="${applicationName}" />
完成上述步骤后,在 AndroidManifest.xml
中添加以下 XML 标签。
iOS 配置
打开 Xcode 并将部署目标更改为 iOS 11
在 Info.plist
文件中添加以下内容:
<dict>
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleURLSchemes</key>
<array>
<string>fb[your_facebook_app_id]</string>
</array>
</dict>
</array>
<key>LSApplicationQueriesSchemes</key>
<array>
<string>instagram</string>
<string>fb</string>
<string>fbauth2</string>
<string>fbshareextension</string>
<string>fbapi</string>
<string>facebook-reels</string>
<string>facebook-stories</string>
<string>fb-messenger-share-api</string>
<string>fb-messenger</string>
<string>tg</string>
<string>whatsapp</string>
<string>twitter</string>
<string>linkedin</string>
</array>
<key>NSPhotoLibraryUsageDescription</key>
<string>$(PRODUCT_NAME) 需要访问您的设备上的照片和视频</string>
<key>NSMicrophoneUsageDescription</key>
<string>$(PRODUCT_NAME) 不需要访问麦克风。</string>
<key>NSCameraUsageDescription</key>
<string>$(PRODUCT_NAME) 需要访问相机。</string>
<key>NSAppleMusicUsageDescription</key>
<string>$(PRODUCT_NAME) 需要播放音乐</string>
<key>FacebookAppID</key>
<string>[your_facebook_app_id]</string>
<key>FacebookClientToken</key>
<string>[your_facebook_client_token]</string>
<key>FacebookDisplayName</key>
<string>[your_facebook_app_display_name]</string>
<key>NSBonjourServices</key>
<array>
<string>_dartobservatory._tcp</string>
</array>
</dict>
Facebook 应用 ID 和 Facebook 客户端令牌可以通过完成 Android 配置中的步骤获得。
在 AppDelegate.swift
文件中添加以下代码:
import FBSDKCoreKit
// 在 application 函数中添加以下代码
FBSDKCoreKit.ApplicationDelegate.shared.application(
application,
didFinishLaunchingWithOptions: launchOptions
)
如果你想要在 iOS 上分享文件到 TikTok,可以按照以下步骤操作。对于 Android 分享,你不需要这些步骤。
步骤 1 - 安装 TikTok SDK
- 在 Xcode 中,点击 File -> Add Packages…
- 粘贴仓库 URL:
https://github.com/tiktok/tiktok-opensdk-ios
- 选择依赖规则 -> 至下一个主要版本,并输入你想要的主要版本(例如 2.2.0,你可以在这里找到最新的发布版本)
- 选择 Add to Project -> 你的项目
- 点击 Copy Dependency 并选择 TikTokOpenShareSDK 和 TiktokOpenCoreSdk 库。
步骤 2 - 配置你的项目
- 打开你的
Info.plist
文件并添加或更新以下键值对: - 添加以下值到
LSApplicationQueriesSchemes
:
tiktokopensdk
用于登录套件。tiktoksharesdk
用于分享套件。snssdk1180
和snssdk1233
用于检查 TikTok 是否已安装在你的设备上。- 添加
TikTokClientKey
键,并将你的应用客户端密钥作为值。 - 将你的应用客户端密钥添加到
CFBundleURLSchemes
。
<key>LSApplicationQueriesSchemes</key>
<array>
<string>tiktokopensdk</string>
<string>tiktoksharesdk</string>
<string>snssdk1180</string>
<string>snssdk1233</string>
</array>
<key>TikTokClientKey</key>
<string>$TikTokClientKey</string>
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleURLSchemes</key>
<array>
<string>$TikTokClientKey</string>
</array>
</dict>
</array>
步骤 3 - 在你的应用的 AppDelegate
中添加以下代码:
import UIKit
import Flutter
import TikTokOpenSDKCore
import TikTokOpenShareSDK
import Foundation
import Photos
@UIApplicationMain
@objc class AppDelegate: FlutterAppDelegate {
override func application(
_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
) -> Bool {
let cntrl : FlutterViewController = self.window?.rootViewController as! FlutterViewController
let tiktok_channel = FlutterMethodChannel(name: "appinio_social_share_tiktok", binaryMessenger: cntrl.binaryMessenger)
tiktok_channel.setMethodCallHandler(
{
(call: FlutterMethodCall, result: @escaping FlutterResult) -> Void in
if call.method == "tiktok_post" {
let args = call.arguments as? [String: Any?]
self.shareVideoToTiktok(args: args!, result: result)
}else{
result("Not implemented!")
}
})
GeneratedPluginRegistrant.register(with: self)
if #available(iOS 10.0, *) {
UNUserNotificationCenter.current().delegate = self as? UNUserNotificationCenterDelegate
}
return super.application(application, didFinishLaunchingWithOptions: launchOptions)
}
override func application(_ app: UIApplication,open url: URL,
options: [UIApplication.OpenURLOptionsKey: Any] = [:]) -> Bool {
if (TikTokURLHandler.handleOpenURL(url)) {
return true
}
return false
}
override func application(_ application: UIApplication,
continue userActivity: NSUserActivity,
restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {
if (TikTokURLHandler.handleOpenURL(userActivity.webpageURL)) {
return true
}
return false
}
func shareVideoToTiktok(args : [String: Any?],result: @escaping FlutterResult) {
let videoFile = args["videoFile"] as? String
let redirectUrl = args["redirectUrl"] as? String
let fileType = args["fileType"] as? String
let videoData = try? Data(contentsOf: URL(fileURLWithPath: videoFile!)) as NSData
PHPhotoLibrary.shared().performChanges({
let documentsPath = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0];
let filePath = "\(documentsPath)/\(Date().description)" + (fileType == "image" ? ".jpeg" : ".mp4")
videoData!.write(toFile: filePath, atomically: true)
if fileType == "image" {
PHAssetChangeRequest.creationRequestForAssetFromImage(atFileURL: URL(fileURLWithPath: filePath))
}else {
PHAssetChangeRequest.creationRequestForAssetFromVideo(atFileURL: URL(fileURLWithPath: filePath))
}
},
completionHandler: { success, error in
if success {
let fetchOptions = PHFetchOptions()
fetchOptions.sortDescriptors = [NSSortDescriptor(key: "creationDate", ascending: false)]
let fetchResult = PHAsset.fetchAssets(with: fileType == "image" ? .image : .video, options: fetchOptions)
if let lastAsset = fetchResult.firstObject {
let localIdentifier = lastAsset.localIdentifier
let shareRequest = TikTokShareRequest(localIdentifiers: [localIdentifier], mediaType: fileType == "image" ? .image : .video, redirectURI: redirectUrl!)
shareRequest.shareFormat = .normal
DispatchQueue.main.async {
shareRequest.send()
result("success")
}
}
}
else if let error = error {
print(error.localizedDescription)
}
else {
result("Error getting the files!")
}
})
}
}
private func registerPlugins(registry: FlutterPluginRegistry) {
}
步骤 3 - 在 TikTok 开发者门户上创建一个 TikTok 应用并获取客户端密钥,并根据步骤 2 添加到 info.plist
中。
在 TikTok 开发者网站的 Appdetails 部分获取 client_key
。然后通过导航到管理应用页面并点击 + 添加产品来向你的应用添加 Share Kit。
完成后,现在 shareToTiktokPost
将在 iOS 上开始工作。
使用示例
class MyApp extends StatefulWidget {
const MyApp({Key? key}) : super(key: key);
[@override](/user/override)
State<MyApp> createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
AppinioSocialSharePlus appinioSocialShare = AppinioSocialSharePlus();
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
title: "Share Feature",
home: Scaffold(
body: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
ElevatedButton(
child: const Text("ShareToWhatsapp"),
onPressed: () async {
FilePickerResult? result = await FilePicker.platform
.pickFiles(type: FileType.image, allowMultiple: false);
if (result != null && result.paths.isNotEmpty) {
shareToWhatsApp("message", result.paths[0]!);
}
},
),
ElevatedButton(
child: const Text("ShareToInstagramStory"),
onPressed: () async {
FilePickerResult? result = await FilePicker.platform
.pickFiles(type: FileType.image, allowMultiple: false);
if (result != null && result.paths.isNotEmpty) {
shareToInstagramStory(
"yourFacebookAppId", "message", result.paths[0]!);
}
},
),
ElevatedButton(
child: const Text("ShareToFacebookStory"),
onPressed: () async {
FilePickerResult? result = await FilePicker.platform
.pickFiles(type: FileType.image, allowMultiple: false);
if (result != null && result.paths.isNotEmpty) {
shareToFacebookStory(
"yourFacebookAppId", result.paths[0]!);
}
},
),
],
),
));
}
shareToWhatsApp(String message, String filePath) async {
await appinioSocialShare.android.shareToSMS(message, filePath);
}
shareToInstagramStory(String appId, String message, String filePath) async {
await appinioSocialShare.android
.shareToInstagramStory(appId, stickerImage: filePath, message: message);
}
shareToFacebookStory(String appId, String filePath) async {
await appinioSocialShare.android
.shareToInstagramStory(appId, stickerImage: filePath);
}
}
更多关于Flutter社交分享插件appinio_social_share_plus的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter社交分享插件appinio_social_share_plus的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
appinio_social_share_plus
是一个用于在 Flutter 应用中实现社交分享功能的插件。它支持分享文本、图片、文件等到各种社交平台和应用程序。以下是如何使用 appinio_social_share_plus
插件的基本步骤:
1. 添加依赖
首先,在 pubspec.yaml
文件中添加 appinio_social_share_plus
依赖:
dependencies:
flutter:
sdk: flutter
appinio_social_share_plus: ^1.0.0 # 确保使用最新版本
然后运行 flutter pub get
来安装依赖。
2. 导入包
在需要使用分享功能的 Dart 文件中,导入 appinio_social_share_plus
包:
import 'package:appinio_social_share_plus/appinio_social_share_plus.dart';
3. 初始化插件
在使用插件之前,你需要初始化 AppinioSocialShare
实例:
final socialShare = AppinioSocialShare();
4. 分享文本
你可以使用 shareToInstagramStory
、shareToWhatsApp
、shareToFacebook
等方法来分享文本到不同的社交平台。
socialShare.shareToWhatsApp(
text: 'Hello, this is a shared text from my Flutter app!',
);
5. 分享图片
你可以分享图片文件到不同的社交平台。首先,确保你有图片文件的路径。
socialShare.shareToInstagramStory(
imagePath: '/path/to/your/image.png',
);
6. 分享文件
你也可以分享文件(例如 PDF、文档等)到支持的社交平台。
socialShare.shareToWhatsApp(
filePath: '/path/to/your/document.pdf',
);
7. 处理回调
你可以监听分享操作的回调,以了解分享是否成功。
socialShare.shareToWhatsApp(
text: 'Hello, this is a shared text from my Flutter app!',
).then((success) {
if (success) {
print('Share successful');
} else {
print('Share failed');
}
});
8. 其他功能
appinio_social_share_plus
还支持其他功能,如分享到 Facebook、Twitter、Telegram 等。你可以根据需求选择合适的分享方法。
示例代码
以下是一个完整的示例,展示如何分享文本和图片到 WhatsApp:
import 'package:flutter/material.dart';
import 'package:appinio_social_share_plus/appinio_social_share_plus.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Social Share Example'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
ElevatedButton(
onPressed: () {
final socialShare = AppinioSocialShare();
socialShare.shareToWhatsApp(
text: 'Hello, this is a shared text from my Flutter app!',
).then((success) {
if (success) {
print('Share successful');
} else {
print('Share failed');
}
});
},
child: Text('Share Text to WhatsApp'),
),
ElevatedButton(
onPressed: () {
final socialShare = AppinioSocialShare();
socialShare.shareToWhatsApp(
filePath: '/path/to/your/image.png',
).then((success) {
if (success) {
print('Share successful');
} else {
print('Share failed');
}
});
},
child: Text('Share Image to WhatsApp'),
),
],
),
),
),
);
}
}