Files
oneapp_docs/service_component/ShareToFriends.md

567 lines
16 KiB
Markdown
Raw Normal View History

2025-09-24 14:08:54 +08:00
# ShareToFriends - 分享功能模块
## 模块概述
`ShareToFriends` 是 OneApp 的分享功能模块,提供了完整的社交分享解决方案。该模块支持多种社交平台分享、自定义分享内容、分享统计分析和权限控制等功能,为用户提供便捷的内容分享体验。
## 核心功能
### 1. 社交平台分享
- **多平台支持**支持微信、QQ、微博、抖音等主流平台
- **原生集成**:深度集成各平台原生分享能力
- **格式适配**:自动适配各平台的内容格式要求
- **状态跟踪**:跟踪分享状态和结果反馈
### 2. 自定义分享内容
- **内容模板**:提供丰富的分享内容模板
- **动态生成**:根据分享内容动态生成分享素材
- **多媒体支持**:支持文字、图片、视频、链接分享
- **品牌定制**:支持品牌元素的自定义添加
### 3. 分享统计分析
- **分享数据统计**:统计分享次数、平台分布等数据
- **用户行为分析**:分析用户分享行为和偏好
- **转化率跟踪**:跟踪分享带来的转化效果
- **热点内容识别**:识别热门分享内容
### 4. 分享权限控制
- **内容权限**:控制可分享的内容范围
- **用户权限**:基于用户角色的分享权限
- **平台限制**:特定平台的分享限制
- **敏感内容过滤**:过滤敏感或不当内容
## 技术架构
### 架构设计
```
┌─────────────────────────────────────┐
│ 应用界面层 │
│ (Share UI Components) │
├─────────────────────────────────────┤
│ ShareToFriends │
│ ┌──────────┬──────────┬──────────┐ │
│ │ 分享管理 │ 内容生成 │ 平台适配 │ │
│ ├──────────┼──────────┼──────────┤ │
│ │ 统计分析 │ 权限控制 │ 缓存管理 │ │
│ └──────────┴──────────┴──────────┘ │
├─────────────────────────────────────┤
│ 平台SDK层 │
│ ┌──────────┬──────────┬──────────┐ │
│ │ 微信SDK │ QQ SDK │ 微博SDK │ │
│ └──────────┴──────────┴──────────┘ │
├─────────────────────────────────────┤
│ 系统分享接口 │
│ (System Share APIs) │
└─────────────────────────────────────┘
```
### 核心组件
#### 1. 分享管理器 (ShareManager)
```dart
class ShareManager {
// 执行分享
Future<ShareResult> share(ShareRequest request);
// 获取可用的分享平台
Future<List<SharePlatform>> getAvailablePlatforms();
// 检查平台可用性
Future<bool> isPlatformAvailable(SharePlatformType platform);
// 注册分享平台
void registerPlatform(SharePlatform platform);
}
```
#### 2. 内容生成器 (ContentGenerator)
```dart
class ShareContentGenerator {
// 生成分享内容
Future<ShareContent> generateContent(ContentTemplate template, Map<String, dynamic> data);
// 创建分享图片
Future<File> createShareImage(ShareImageConfig config);
// 生成分享链接
Future<String> generateShareLink(ShareLinkConfig config);
// 格式化分享文本
String formatShareText(String template, Map<String, String> variables);
}
```
#### 3. 平台适配器 (PlatformAdapter)
```dart
class SharePlatformAdapter {
// 适配分享内容
ShareContent adaptContent(ShareContent content, SharePlatformType platform);
// 验证内容格式
ValidationResult validateContent(ShareContent content, SharePlatformType platform);
// 获取平台限制
PlatformLimitations getPlatformLimitations(SharePlatformType platform);
// 转换内容格式
ShareContent convertContentFormat(ShareContent content, ContentFormat targetFormat);
}
```
#### 4. 统计分析器 (ShareAnalytics)
```dart
class ShareAnalytics {
// 记录分享事件
Future<void> recordShareEvent(ShareEvent event);
// 获取分享统计
Future<ShareStatistics> getShareStatistics(StatisticsQuery query);
// 分析用户分享行为
Future<UserShareBehavior> analyzeUserBehavior(String userId);
// 获取热门分享内容
Future<List<PopularContent>> getPopularContent(TimeRange timeRange);
}
```
## 数据模型
### 分享请求模型
```dart
class ShareRequest {
final String id;
final ShareContent content;
final SharePlatformType platform;
final ShareOptions options;
final String? userId;
final Map<String, dynamic> metadata;
final DateTime timestamp;
}
class ShareContent {
final String? title;
final String? description;
final String? text;
final List<String> images;
final String? video;
final String? url;
final String? thumbnailUrl;
final ContentType type;
final Map<String, dynamic> extras;
}
enum ContentType {
text, // 纯文本
image, // 图片
video, // 视频
link, // 链接
miniProgram, // 小程序
music, // 音乐
file // 文件
}
```
### 分享平台模型
```dart
enum SharePlatformType {
wechat, // 微信好友
wechatMoments, // 微信朋友圈
qq, // QQ好友
qzone, // QQ空间
weibo, // 新浪微博
douyin, // 抖音
system, // 系统分享
copy, // 复制链接
email, // 邮件
sms // 短信
}
class SharePlatform {
final SharePlatformType type;
final String name;
final String packageName;
final String iconUrl;
final bool isInstalled;
final bool isEnabled;
final PlatformLimitations limitations;
final Map<String, dynamic> config;
}
```
### 分享结果模型
```dart
class ShareResult {
final bool isSuccess;
final SharePlatformType platform;
final String? shareId;
final String? errorMessage;
final int? errorCode;
final DateTime timestamp;
final Map<String, dynamic> extraData;
}
class ShareStatistics {
final int totalShares;
final Map<SharePlatformType, int> platformDistribution;
final Map<ContentType, int> contentTypeDistribution;
final List<ShareTrend> trends;
final double averageSharesPerUser;
final List<TopSharedContent> topContent;
}
```
## API 接口
### 分享接口
```dart
abstract class ShareService {
// 执行分享
Future<ApiResponse<ShareResult>> executeShare(ShareRequest request);
// 获取分享平台列表
Future<ApiResponse<List<SharePlatform>>> getSharePlatforms();
// 预览分享内容
Future<ApiResponse<SharePreview>> previewShare(PreviewRequest request);
// 获取分享历史
Future<ApiResponse<List<ShareRecord>>> getShareHistory(HistoryQuery query);
}
```
### 内容生成接口
```dart
abstract class ShareContentService {
// 生成分享内容
Future<ApiResponse<ShareContent>> generateShareContent(ContentGenerationRequest request);
// 创建分享海报
Future<ApiResponse<String>> createSharePoster(PosterCreationRequest request);
// 获取内容模板
Future<ApiResponse<List<ContentTemplate>>> getContentTemplates(String category);
}
```
### 统计分析接口
```dart
abstract class ShareAnalyticsService {
// 获取分享统计数据
Future<ApiResponse<ShareStatistics>> getShareStatistics(StatisticsRequest request);
// 获取用户分享行为
Future<ApiResponse<UserShareBehavior>> getUserShareBehavior(String userId);
// 获取热门分享内容
Future<ApiResponse<List<PopularContent>>> getPopularContent(PopularContentRequest request);
}
```
## 配置管理
### 分享配置
```dart
class ShareConfig {
final List<SharePlatformType> enabledPlatforms;
final bool enableAnalytics;
final bool enableContentGeneration;
final int maxImageSize;
final Duration shareTimeout;
final Map<SharePlatformType, PlatformConfig> platformConfigs;
static const ShareConfig defaultConfig = ShareConfig(
enabledPlatforms: [
SharePlatformType.wechat,
SharePlatformType.wechatMoments,
SharePlatformType.qq,
SharePlatformType.qzone,
SharePlatformType.weibo,
SharePlatformType.system,
],
enableAnalytics: true,
enableContentGeneration: true,
maxImageSize: 1024 * 1024 * 2, // 2MB
shareTimeout: Duration(seconds: 30),
platformConfigs: {},
);
}
```
### 内容配置
```dart
class ContentConfig {
final String appName;
final String appDescription;
final String defaultShareUrl;
final String logoUrl;
final Map<String, String> shareTemplates;
final List<String> sensitiveWords;
static const ContentConfig defaultContentConfig = ContentConfig(
appName: 'OneApp',
appDescription: '智能车联网应用',
defaultShareUrl: 'https://oneapp.com',
logoUrl: 'https://oneapp.com/logo.png',
shareTemplates: {
'vehicle': '我在OneApp发现了一款不错的车辆{vehicleName}',
'charging': '在OneApp找到了便宜的充电站分享给你{stationName}',
},
sensitiveWords: ['敏感词1', '敏感词2'],
);
}
```
## 使用示例
### 基本分享功能
```dart
// 分享文本内容
final shareRequest = ShareRequest(
id: 'share_text_${DateTime.now().millisecondsSinceEpoch}',
content: ShareContent(
text: '我在使用OneApp感觉很不错',
url: 'https://oneapp.com',
type: ContentType.text,
),
platform: SharePlatformType.wechat,
options: ShareOptions(
enableAnalytics: true,
autoGenerateImage: false,
),
);
final result = await ShareManager.instance.share(shareRequest);
if (result.isSuccess) {
print('分享成功');
} else {
print('分享失败: ${result.errorMessage}');
}
```
### 分享图片内容
```dart
// 分享车辆信息
final vehicleInfo = {
'name': 'Model Y',
'brand': 'Tesla',
'price': '30万',
'image': 'https://example.com/vehicle.jpg',
};
// 生成分享内容
final shareContent = await ShareContentGenerator.instance.generateContent(
ContentTemplate.vehicle,
vehicleInfo,
);
// 创建分享海报
final posterPath = await ShareContentGenerator.instance.createShareImage(
ShareImageConfig(
template: 'vehicle_poster',
data: vehicleInfo,
size: Size(750, 1334),
),
);
// 执行分享
final shareResult = await ShareManager.instance.share(
ShareRequest(
id: 'share_vehicle',
content: ShareContent(
title: vehicleInfo['name'],
description: '${vehicleInfo['brand']} ${vehicleInfo['name']} - ${vehicleInfo['price']}',
images: [posterPath],
url: 'https://oneapp.com/vehicle/${vehicleInfo['id']}',
type: ContentType.image,
),
platform: SharePlatformType.wechatMoments,
),
);
```
### 多平台分享
```dart
// 获取可用的分享平台
final availablePlatforms = await ShareManager.instance.getAvailablePlatforms();
// 显示分享面板
showSharePanel(
context: context,
platforms: availablePlatforms,
content: shareContent,
onPlatformSelected: (platform) async {
final result = await ShareManager.instance.share(
ShareRequest(
content: shareContent,
platform: platform.type,
),
);
if (result.isSuccess) {
showSuccessToast('分享成功');
} else {
showErrorToast('分享失败: ${result.errorMessage}');
}
},
);
```
### 分享统计分析
```dart
// 获取分享统计数据
final statistics = await ShareAnalytics.instance.getShareStatistics(
StatisticsQuery(
timeRange: TimeRange.lastMonth,
groupBy: GroupBy.platform,
),
);
print('总分享次数: ${statistics.totalShares}');
print('平台分布:');
statistics.platformDistribution.forEach((platform, count) {
print(' ${platform.name}: $count次');
});
// 获取热门分享内容
final popularContent = await ShareAnalytics.instance.getPopularContent(
TimeRange.lastWeek,
);
print('热门分享内容:');
for (final content in popularContent) {
print(' ${content.title}: ${content.shareCount}次分享');
}
```
### 自定义分享内容
```dart
// 注册自定义内容模板
ShareContentGenerator.instance.registerTemplate(
'custom_vehicle',
ContentTemplate(
id: 'custom_vehicle',
name: '自定义车辆分享',
textTemplate: '我在OneApp发现了{brand} {model}{feature},推荐给你!',
imageTemplate: 'custom_vehicle_poster.png',
variables: ['brand', 'model', 'feature', 'price'],
),
);
// 使用自定义模板生成内容
final customContent = await ShareContentGenerator.instance.generateContent(
'custom_vehicle',
{
'brand': 'BMW',
'model': 'iX3',
'feature': '续航500公里',
'price': '40万',
},
);
```
## 测试策略
### 单元测试
```dart
group('ShareManager Tests', () {
test('should share content successfully', () async {
// Given
final shareManager = ShareManager();
final shareRequest = ShareRequest(
content: ShareContent(text: 'Test share'),
platform: SharePlatformType.system,
);
// When
final result = await shareManager.share(shareRequest);
// Then
expect(result.isSuccess, true);
expect(result.platform, SharePlatformType.system);
});
test('should generate share content from template', () async {
// Given
final generator = ShareContentGenerator();
final template = ContentTemplate.vehicle;
final data = {'name': 'Model 3', 'brand': 'Tesla'};
// When
final content = await generator.generateContent(template, data);
// Then
expect(content.title, contains('Model 3'));
expect(content.description, contains('Tesla'));
});
});
```
### 集成测试
```dart
group('Share Integration Tests', () {
testWidgets('share flow', (tester) async {
// 1. 点击分享按钮
await tester.tap(find.byKey(Key('share_button')));
await tester.pumpAndSettle();
// 2. 验证分享面板显示
expect(find.byType(SharePanel), findsOneWidget);
// 3. 选择分享平台
await tester.tap(find.byKey(Key('platform_wechat')));
await tester.pumpAndSettle();
// 4. 验证分享执行
verify(mockShareManager.share(any)).called(1);
});
});
```
## 性能优化
### 内容生成优化
- **模板缓存**:缓存常用的内容模板
- **图片压缩**:自动压缩分享图片
- **异步处理**:异步生成分享内容
- **批量处理**:批量处理多个分享请求
### 平台集成优化
- **懒加载SDK**按需加载平台SDK
- **连接池**:复用网络连接
- **缓存检查**:缓存平台可用性检查结果
- **超时控制**:合理的超时时间设置
## 版本历史
### v0.2.5+3 (当前版本)
- 新增抖音分享支持
- 优化分享内容生成性能
- 支持自定义分享模板
- 修复微信分享回调问题
### v0.2.4
- 支持视频内容分享
- 新增分享统计分析
- 优化分享面板UI
- 改进错误处理机制
## 依赖关系
### 内部依赖
- `basic_utils`: 工具类库
- `basic_storage`: 本地存储
- `basic_network`: 网络请求
- `basic_logger`: 日志记录
### 外部依赖
- `fluwx`: 微信分享SDK
- `share_plus`: 系统分享
- `image`: 图片处理
- `path_provider`: 文件路径
## 总结
`ShareToFriends` 模块为 OneApp 提供了完整的社交分享解决方案。通过多平台支持、自定义内容生成、统计分析和权限控制等功能,该模块让用户能够便捷地分享应用内容到各大社交平台,同时为运营团队提供了有价值的分享数据分析,有助于提升用户参与度和应用传播效果。