mirror of
https://github.com/RxReader/tencent_kit.git
synced 2025-07-15 03:02:09 +08:00
添加文本分享
This commit is contained in:
@ -15,49 +15,64 @@ def parse_KV_file(file, separator='=')
|
|||||||
if !File.exists? file_abs_path
|
if !File.exists? file_abs_path
|
||||||
return [];
|
return [];
|
||||||
end
|
end
|
||||||
pods_ary = []
|
generated_key_values = {}
|
||||||
skip_line_start_symbols = ["#", "/"]
|
skip_line_start_symbols = ["#", "/"]
|
||||||
File.foreach(file_abs_path) { |line|
|
File.foreach(file_abs_path) do |line|
|
||||||
next if skip_line_start_symbols.any? { |symbol| line =~ /^\s*#{symbol}/ }
|
next if skip_line_start_symbols.any? { |symbol| line =~ /^\s*#{symbol}/ }
|
||||||
plugin = line.split(pattern=separator)
|
plugin = line.split(pattern=separator)
|
||||||
if plugin.length == 2
|
if plugin.length == 2
|
||||||
podname = plugin[0].strip()
|
podname = plugin[0].strip()
|
||||||
path = plugin[1].strip()
|
path = plugin[1].strip()
|
||||||
podpath = File.expand_path("#{path}", file_abs_path)
|
podpath = File.expand_path("#{path}", file_abs_path)
|
||||||
pods_ary.push({:name => podname, :path => podpath});
|
generated_key_values[podname] = podpath
|
||||||
else
|
else
|
||||||
puts "Invalid plugin specification: #{line}"
|
puts "Invalid plugin specification: #{line}"
|
||||||
end
|
end
|
||||||
}
|
end
|
||||||
return pods_ary
|
generated_key_values
|
||||||
end
|
end
|
||||||
|
|
||||||
target 'Runner' do
|
target 'Runner' do
|
||||||
|
# Flutter Pod
|
||||||
|
|
||||||
|
copied_flutter_dir = File.join(__dir__, 'Flutter')
|
||||||
|
copied_framework_path = File.join(copied_flutter_dir, 'Flutter.framework')
|
||||||
|
copied_podspec_path = File.join(copied_flutter_dir, 'Flutter.podspec')
|
||||||
|
unless File.exist?(copied_framework_path) && File.exist?(copied_podspec_path)
|
||||||
|
# Copy Flutter.framework and Flutter.podspec to Flutter/ to have something to link against if the xcode backend script has not run yet.
|
||||||
|
# That script will copy the correct debug/profile/release version of the framework based on the currently selected Xcode configuration.
|
||||||
|
# CocoaPods will not embed the framework on pod install (before any build phases can generate) if the dylib does not exist.
|
||||||
|
|
||||||
|
generated_xcode_build_settings_path = File.join(copied_flutter_dir, 'Generated.xcconfig')
|
||||||
|
unless File.exist?(generated_xcode_build_settings_path)
|
||||||
|
raise "Generated.xcconfig must exist. If you're running pod install manually, make sure flutter pub get is executed first"
|
||||||
|
end
|
||||||
|
generated_xcode_build_settings = parse_KV_file(generated_xcode_build_settings_path)
|
||||||
|
cached_framework_dir = generated_xcode_build_settings['FLUTTER_FRAMEWORK_DIR'];
|
||||||
|
|
||||||
|
unless File.exist?(copied_framework_path)
|
||||||
|
FileUtils.cp_r(File.join(cached_framework_dir, 'Flutter.framework'), copied_flutter_dir)
|
||||||
|
end
|
||||||
|
unless File.exist?(copied_podspec_path)
|
||||||
|
FileUtils.cp(File.join(cached_framework_dir, 'Flutter.podspec'), copied_flutter_dir)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
# Keep pod path relative so it can be checked into Podfile.lock.
|
||||||
|
pod 'Flutter', :path => 'Flutter'
|
||||||
|
|
||||||
|
# Plugin Pods
|
||||||
|
|
||||||
# Prepare symlinks folder. We use symlinks to avoid having Podfile.lock
|
# Prepare symlinks folder. We use symlinks to avoid having Podfile.lock
|
||||||
# referring to absolute paths on developers' machines.
|
# referring to absolute paths on developers' machines.
|
||||||
system('rm -rf .symlinks')
|
system('rm -rf .symlinks')
|
||||||
system('mkdir -p .symlinks/plugins')
|
system('mkdir -p .symlinks/plugins')
|
||||||
|
|
||||||
# Flutter Pods
|
|
||||||
generated_xcode_build_settings = parse_KV_file('./Flutter/Generated.xcconfig')
|
|
||||||
if generated_xcode_build_settings.empty?
|
|
||||||
puts "Generated.xcconfig must exist. If you're running pod install manually, make sure flutter pub get is executed first."
|
|
||||||
end
|
|
||||||
generated_xcode_build_settings.map { |p|
|
|
||||||
if p[:name] == 'FLUTTER_FRAMEWORK_DIR'
|
|
||||||
symlink = File.join('.symlinks', 'flutter')
|
|
||||||
File.symlink(File.dirname(p[:path]), symlink)
|
|
||||||
pod 'Flutter', :path => File.join(symlink, File.basename(p[:path]))
|
|
||||||
end
|
|
||||||
}
|
|
||||||
|
|
||||||
# Plugin Pods
|
|
||||||
plugin_pods = parse_KV_file('../.flutter-plugins')
|
plugin_pods = parse_KV_file('../.flutter-plugins')
|
||||||
plugin_pods.map { |p|
|
plugin_pods.each do |name, path|
|
||||||
symlink = File.join('.symlinks', 'plugins', p[:name])
|
symlink = File.join('.symlinks', 'plugins', name)
|
||||||
File.symlink(p[:path], symlink)
|
File.symlink(path, symlink)
|
||||||
pod p[:name], :path => File.join(symlink, 'ios')
|
pod name, :path => File.join(symlink, 'ios')
|
||||||
}
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
# Prevent Cocoapods from embedding a second Flutter framework and causing an error with the new Xcode build system.
|
# Prevent Cocoapods from embedding a second Flutter framework and causing an error with the new Xcode build system.
|
||||||
|
@ -2,17 +2,17 @@ PODS:
|
|||||||
- Flutter (1.0.0)
|
- Flutter (1.0.0)
|
||||||
- path_provider (0.0.1):
|
- path_provider (0.0.1):
|
||||||
- Flutter
|
- Flutter
|
||||||
- tencent_kit (1.0.2):
|
- tencent_kit (1.0.4):
|
||||||
- Flutter
|
- Flutter
|
||||||
|
|
||||||
DEPENDENCIES:
|
DEPENDENCIES:
|
||||||
- Flutter (from `.symlinks/flutter/ios`)
|
- Flutter (from `Flutter`)
|
||||||
- path_provider (from `.symlinks/plugins/path_provider/ios`)
|
- path_provider (from `.symlinks/plugins/path_provider/ios`)
|
||||||
- tencent_kit (from `.symlinks/plugins/tencent_kit/ios`)
|
- tencent_kit (from `.symlinks/plugins/tencent_kit/ios`)
|
||||||
|
|
||||||
EXTERNAL SOURCES:
|
EXTERNAL SOURCES:
|
||||||
Flutter:
|
Flutter:
|
||||||
:path: ".symlinks/flutter/ios"
|
:path: Flutter
|
||||||
path_provider:
|
path_provider:
|
||||||
:path: ".symlinks/plugins/path_provider/ios"
|
:path: ".symlinks/plugins/path_provider/ios"
|
||||||
tencent_kit:
|
tencent_kit:
|
||||||
@ -21,8 +21,8 @@ EXTERNAL SOURCES:
|
|||||||
SPEC CHECKSUMS:
|
SPEC CHECKSUMS:
|
||||||
Flutter: 0e3d915762c693b495b44d77113d4970485de6ec
|
Flutter: 0e3d915762c693b495b44d77113d4970485de6ec
|
||||||
path_provider: fb74bd0465e96b594bb3b5088ee4a4e7bb1f2a9d
|
path_provider: fb74bd0465e96b594bb3b5088ee4a4e7bb1f2a9d
|
||||||
tencent_kit: b057e0ae9d0c9b5d02c893b3e3ac602200cb733d
|
tencent_kit: 0712377066f9a937c0de9ce468cbae18b3688f47
|
||||||
|
|
||||||
PODFILE CHECKSUM: 7fb83752f59ead6285236625b82473f90b1cb932
|
PODFILE CHECKSUM: 3dbe063e9c90a5d7c9e4e76e70a821b9e2c1d271
|
||||||
|
|
||||||
COCOAPODS: 1.8.4
|
COCOAPODS: 1.8.4
|
||||||
|
@ -127,7 +127,7 @@ class _HomeState extends State<Home> {
|
|||||||
},
|
},
|
||||||
),
|
),
|
||||||
ListTile(
|
ListTile(
|
||||||
title: const Text('分享文字'),
|
title: const Text('分享说说'),
|
||||||
onTap: () {
|
onTap: () {
|
||||||
_tencent.shareMood(
|
_tencent.shareMood(
|
||||||
scene: TencentScene.SCENE_QZONE,
|
scene: TencentScene.SCENE_QZONE,
|
||||||
@ -135,6 +135,15 @@ class _HomeState extends State<Home> {
|
|||||||
);
|
);
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
|
ListTile(
|
||||||
|
title: const Text('文本分享'),
|
||||||
|
onTap: () {
|
||||||
|
_tencent.shareText(
|
||||||
|
scene: TencentScene.SCENE_QZONE,
|
||||||
|
summary: '分享测试',
|
||||||
|
);
|
||||||
|
},
|
||||||
|
),
|
||||||
ListTile(
|
ListTile(
|
||||||
title: const Text('图片分享'),
|
title: const Text('图片分享'),
|
||||||
onTap: () async {
|
onTap: () async {
|
||||||
@ -166,7 +175,7 @@ class _HomeState extends State<Home> {
|
|||||||
},
|
},
|
||||||
),
|
),
|
||||||
ListTile(
|
ListTile(
|
||||||
title: const Text('分享链接'),
|
title: const Text('网页分享'),
|
||||||
onTap: () {
|
onTap: () {
|
||||||
_tencent.shareWebpage(
|
_tencent.shareWebpage(
|
||||||
scene: TencentScene.SCENE_QQ,
|
scene: TencentScene.SCENE_QQ,
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
name: tencent_kit_example
|
name: tencent_kit_example
|
||||||
description: Demonstrates how to use the tencent_kit plugin.
|
description: Demonstrates how to use the tencent_kit plugin.
|
||||||
|
version: 1.0.0+1000
|
||||||
publish_to: 'none'
|
publish_to: 'none'
|
||||||
|
|
||||||
environment:
|
environment:
|
||||||
|
@ -41,6 +41,7 @@ static NSString *const METHOD_ISINSTALLED = @"isInstalled";
|
|||||||
static NSString *const METHOD_LOGIN = @"login";
|
static NSString *const METHOD_LOGIN = @"login";
|
||||||
static NSString *const METHOD_LOGOUT = @"logout";
|
static NSString *const METHOD_LOGOUT = @"logout";
|
||||||
static NSString *const METHOD_SHAREMOOD = @"shareMood";
|
static NSString *const METHOD_SHAREMOOD = @"shareMood";
|
||||||
|
static NSString *const METHOD_SHARETEXT = @"shareText";
|
||||||
static NSString *const METHOD_SHAREIMAGE = @"shareImage";
|
static NSString *const METHOD_SHAREIMAGE = @"shareImage";
|
||||||
static NSString *const METHOD_SHAREMUSIC = @"shareMusic";
|
static NSString *const METHOD_SHAREMUSIC = @"shareMusic";
|
||||||
static NSString *const METHOD_SHAREWEBPAGE = @"shareWebpage";
|
static NSString *const METHOD_SHAREWEBPAGE = @"shareWebpage";
|
||||||
@ -102,6 +103,8 @@ static NSString *const SCHEME_FILE = @"file";
|
|||||||
[self logout:call result:result];
|
[self logout:call result:result];
|
||||||
} else if ([METHOD_SHAREMOOD isEqualToString:call.method]) {
|
} else if ([METHOD_SHAREMOOD isEqualToString:call.method]) {
|
||||||
[self shareMood:call result:result];
|
[self shareMood:call result:result];
|
||||||
|
} else if ([METHOD_SHARETEXT isEqualToString:call.method]) {
|
||||||
|
[self shareText:call result:result];
|
||||||
} else if ([METHOD_SHAREIMAGE isEqualToString:call.method]) {
|
} else if ([METHOD_SHAREIMAGE isEqualToString:call.method]) {
|
||||||
[self shareImage:call result:result];
|
[self shareImage:call result:result];
|
||||||
} else if ([METHOD_SHAREMUSIC isEqualToString:call.method]) {
|
} else if ([METHOD_SHAREMUSIC isEqualToString:call.method]) {
|
||||||
@ -163,6 +166,19 @@ static NSString *const SCHEME_FILE = @"file";
|
|||||||
result(nil);
|
result(nil);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (void)shareText:(FlutterMethodCall *)call result:(FlutterResult)result {
|
||||||
|
NSNumber *scene = call.arguments[ARGUMENT_KEY_SCENE];
|
||||||
|
NSString *summary = call.arguments[ARGUMENT_KEY_SUMMARY];
|
||||||
|
QQApiTextObject *object = [QQApiTextObject objectWithText:summary];
|
||||||
|
SendMessageToQQReq *req = [SendMessageToQQReq reqWithContent:object];
|
||||||
|
if (scene.intValue == SCENE_QQ) {
|
||||||
|
[QQApiInterface sendReq:req];
|
||||||
|
} else if (scene.intValue == SCENE_QZONE) {
|
||||||
|
[QQApiInterface SendReqToQZone:req];
|
||||||
|
}
|
||||||
|
result(nil);
|
||||||
|
}
|
||||||
|
|
||||||
- (void)shareImage:(FlutterMethodCall *)call result:(FlutterResult)result {
|
- (void)shareImage:(FlutterMethodCall *)call result:(FlutterResult)result {
|
||||||
NSNumber *scene = call.arguments[ARGUMENT_KEY_SCENE];
|
NSNumber *scene = call.arguments[ARGUMENT_KEY_SCENE];
|
||||||
if (scene.intValue == SCENE_QQ) {
|
if (scene.intValue == SCENE_QQ) {
|
||||||
|
@ -22,6 +22,7 @@ class Tencent {
|
|||||||
static const String _METHOD_LOGIN = 'login';
|
static const String _METHOD_LOGIN = 'login';
|
||||||
static const String _METHOD_LOGOUT = 'logout';
|
static const String _METHOD_LOGOUT = 'logout';
|
||||||
static const String _METHOD_SHAREMOOD = 'shareMood';
|
static const String _METHOD_SHAREMOOD = 'shareMood';
|
||||||
|
static const String _METHOD_SHARETEXT = 'shareText';
|
||||||
static const String _METHOD_SHAREIMAGE = 'shareImage';
|
static const String _METHOD_SHAREIMAGE = 'shareImage';
|
||||||
static const String _METHOD_SHAREMUSIC = 'shareMusic';
|
static const String _METHOD_SHAREMUSIC = 'shareMusic';
|
||||||
static const String _METHOD_SHAREWEBPAGE = 'shareWebpage';
|
static const String _METHOD_SHAREWEBPAGE = 'shareWebpage';
|
||||||
@ -217,6 +218,19 @@ class Tencent {
|
|||||||
return _channel.invokeMethod(_METHOD_SHAREMOOD, arguments);
|
return _channel.invokeMethod(_METHOD_SHAREMOOD, arguments);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// 分享 - 文本
|
||||||
|
Future<void> shareText({
|
||||||
|
@required int scene,
|
||||||
|
@required String summary,
|
||||||
|
}) {
|
||||||
|
assert(summary != null && summary.isNotEmpty);
|
||||||
|
final Map<String, dynamic> arguments = <String, dynamic>{
|
||||||
|
_ARGUMENT_KEY_SCENE: scene,
|
||||||
|
_ARGUMENT_KEY_SUMMARY: summary,
|
||||||
|
};
|
||||||
|
return _channel.invokeMethod(_METHOD_SHAREMOOD, arguments);
|
||||||
|
}
|
||||||
|
|
||||||
/// 分享 - 图片
|
/// 分享 - 图片
|
||||||
Future<void> shareImage({
|
Future<void> shareImage({
|
||||||
@required int scene,
|
@required int scene,
|
||||||
|
Reference in New Issue
Block a user