图文分享 & 大图分享

This commit is contained in:
v7lin 2019-05-29 18:19:41 +08:00
parent eddbe9d4aa
commit 4eeff2435f
5 changed files with 67 additions and 23 deletions

View File

@ -20,6 +20,13 @@ flutter版新浪微博SDK
* [simple_pub_server](https://github.com/v7lin/simple_pub_server) * [simple_pub_server](https://github.com/v7lin/simple_pub_server)
## docs
* [Android ](https://open.weibo.com/wiki/Sdk/android)
* [iOS ](https://open.weibo.com/wiki/Sdk/ios)
* [Android Github](https://github.com/sinaweibosdk/weibo_android_sdk)
* [iOS Github](https://github.com/sinaweibosdk/weibo_ios_sdk)
## android ## android
```` ````

View File

@ -1,6 +1,7 @@
package io.github.v7lin.fakeweibo; package io.github.v7lin.fakeweibo;
import android.content.Intent; import android.content.Intent;
import android.net.Uri;
import android.text.TextUtils; import android.text.TextUtils;
import com.sina.weibo.sdk.WbSdk; import com.sina.weibo.sdk.WbSdk;
@ -72,6 +73,7 @@ public class FakeWeiboPlugin implements MethodCallHandler, PluginRegistry.Activi
private static final String ARGUMENT_KEY_DESCRIPTION = "description"; private static final String ARGUMENT_KEY_DESCRIPTION = "description";
private static final String ARGUMENT_KEY_THUMBDATA = "thumbData"; private static final String ARGUMENT_KEY_THUMBDATA = "thumbData";
private static final String ARGUMENT_KEY_IMAGEDATA = "imageData"; private static final String ARGUMENT_KEY_IMAGEDATA = "imageData";
private static final String ARGUMENT_KEY_IMAGEURI = "imageUri";
private static final String ARGUMENT_KEY_WEBPAGEURL = "webpageUrl"; private static final String ARGUMENT_KEY_WEBPAGEURL = "webpageUrl";
private static final String ARGUMENT_KEY_RESULT_ERRORCODE = "errorCode"; private static final String ARGUMENT_KEY_RESULT_ERRORCODE = "errorCode";
@ -182,8 +184,20 @@ public class FakeWeiboPlugin implements MethodCallHandler, PluginRegistry.Activi
WeiboMultiMessage message = new WeiboMultiMessage(); WeiboMultiMessage message = new WeiboMultiMessage();
if (METHOD_SHAREIMAGE.equals(call.method)) { if (METHOD_SHAREIMAGE.equals(call.method)) {
if (call.hasArgument(ARGUMENT_KEY_TEXT)) {
TextObject object = new TextObject();
object.text = call.argument(ARGUMENT_KEY_TEXT);// 1024
message.textObject = object;
}
ImageObject object = new ImageObject(); ImageObject object = new ImageObject();
if (call.hasArgument(ARGUMENT_KEY_IMAGEDATA)) {
object.imageData = call.argument(ARGUMENT_KEY_IMAGEDATA);// 2 * 1024 * 1024 object.imageData = call.argument(ARGUMENT_KEY_IMAGEDATA);// 2 * 1024 * 1024
} else if (call.hasArgument(ARGUMENT_KEY_IMAGEURI)) {
String imageUri = call.argument(ARGUMENT_KEY_IMAGEURI);
object.imagePath = Uri.parse(imageUri).getPath();// 512 - 10 * 1024 * 1024
}
message.mediaObject = object; message.mediaObject = object;
} else if (METHOD_SHAREWEBPAGE.equals(call.method)) { } else if (METHOD_SHAREWEBPAGE.equals(call.method)) {

View File

@ -143,6 +143,7 @@ class _HomeState extends State<Home> {
await image.obtainKey(createLocalImageConfiguration(context)); await image.obtainKey(createLocalImageConfiguration(context));
ByteData imageData = await key.bundle.load(key.name); ByteData imageData = await key.bundle.load(key.name);
await _weibo.shareImage( await _weibo.shareImage(
text: 'Share Text',
imageData: imageData.buffer.asUint8List(), imageData: imageData.buffer.asUint8List(),
); );
}, },

View File

@ -36,6 +36,7 @@ static NSString * const ARGUMENT_KEY_TITLE = @"title";
static NSString * const ARGUMENT_KEY_DESCRIPTION = @"description"; static NSString * const ARGUMENT_KEY_DESCRIPTION = @"description";
static NSString * const ARGUMENT_KEY_THUMBDATA = @"thumbData"; static NSString * const ARGUMENT_KEY_THUMBDATA = @"thumbData";
static NSString * const ARGUMENT_KEY_IMAGEDATA = @"imageData"; static NSString * const ARGUMENT_KEY_IMAGEDATA = @"imageData";
static NSString * const ARGUMENT_KEY_IMAGEURI = @"imageUri";
static NSString * const ARGUMENT_KEY_WEBPAGEURL = @"webpageUrl"; static NSString * const ARGUMENT_KEY_WEBPAGEURL = @"webpageUrl";
static NSString * const ARGUMENT_KEY_RESULT_ERRORCODE = @"errorCode"; static NSString * const ARGUMENT_KEY_RESULT_ERRORCODE = @"errorCode";
@ -95,9 +96,16 @@ static NSString * const ARGUMENT_KEY_RESULT_EXPIRESIN = @"expiresIn";
WBSendMessageToWeiboRequest * request = [WBSendMessageToWeiboRequest request]; WBSendMessageToWeiboRequest * request = [WBSendMessageToWeiboRequest request];
WBMessageObject * message = [WBMessageObject message]; WBMessageObject * message = [WBMessageObject message];
if ([METHOD_SHAREIMAGE isEqualToString:call.method]) { if ([METHOD_SHAREIMAGE isEqualToString:call.method]) {
message.text = call.arguments[ARGUMENT_KEY_TEXT];
WBImageObject * object = [WBImageObject object]; WBImageObject * object = [WBImageObject object];
FlutterStandardTypedData * imageData = call.arguments[ARGUMENT_KEY_IMAGEDATA]; FlutterStandardTypedData * imageData = call.arguments[ARGUMENT_KEY_IMAGEDATA];
if (imageData != nil) {
object.imageData = imageData.data; object.imageData = imageData.data;
} else {
NSString * imageUri = call.arguments[ARGUMENT_KEY_IMAGEURI];
NSURL * imageUrl = [NSURL URLWithString:imageUri];
object.imageData = [NSData dataWithContentsOfFile:imageUrl.path];
}
message.imageObject = object; message.imageObject = object;
} else if ([METHOD_SHAREWEBPAGE isEqualToString:call.method]) { } else if ([METHOD_SHAREWEBPAGE isEqualToString:call.method]) {
WBWebpageObject * object = [WBWebpageObject object]; WBWebpageObject * object = [WBWebpageObject object];

View File

@ -28,8 +28,11 @@ class Weibo {
static const String _ARGUMENT_KEY_DESCRIPTION = 'description'; static const String _ARGUMENT_KEY_DESCRIPTION = 'description';
static const String _ARGUMENT_KEY_THUMBDATA = 'thumbData'; static const String _ARGUMENT_KEY_THUMBDATA = 'thumbData';
static const String _ARGUMENT_KEY_IMAGEDATA = 'imageData'; static const String _ARGUMENT_KEY_IMAGEDATA = 'imageData';
static const String _ARGUMENT_KEY_IMAGEURI = 'imageUri';
static const String _ARGUMENT_KEY_WEBPAGEURL = 'webpageUrl'; static const String _ARGUMENT_KEY_WEBPAGEURL = 'webpageUrl';
static const String _SCHEME_FILE = 'file';
static const String _DEFAULT_REDIRECTURL = static const String _DEFAULT_REDIRECTURL =
'https://api.weibo.com/oauth2/default.html'; 'https://api.weibo.com/oauth2/default.html';
@ -129,16 +132,15 @@ class Weibo {
.fromMap(json.decode(content) as Map<dynamic, dynamic>); .fromMap(json.decode(content) as Map<dynamic, dynamic>);
} }
throw HttpException( throw HttpException(
'HttpResponse statusCode: ${response.statusCode}, reasonPhrase: ${response.reasonPhrase}.'); 'HttpResponse statusCode: ${response
.statusCode}, reasonPhrase: ${response.reasonPhrase}.');
}); });
} }
Uri _encodeUrl( Uri _encodeUrl(String baseUrl,
String baseUrl,
String appkey, String appkey,
String accessToken, String accessToken,
Map<String, String> params, Map<String, String> params,) {
) {
params.putIfAbsent('source', () => appkey); params.putIfAbsent('source', () => appkey);
params.putIfAbsent('access_token', () => accessToken); params.putIfAbsent('access_token', () => accessToken);
Uri baseUri = Uri.parse(baseUrl); Uri baseUri = Uri.parse(baseUrl);
@ -155,7 +157,7 @@ class Weibo {
Future<void> shareText({ Future<void> shareText({
@required String text, @required String text,
}) { }) {
assert(text != null && text.isNotEmpty && text.length <= 1024); assert(text != null && text.length <= 1024);
return _channel.invokeMethod( return _channel.invokeMethod(
_METHOD_SHARETEXT, _METHOD_SHARETEXT,
<String, dynamic>{ <String, dynamic>{
@ -166,15 +168,27 @@ class Weibo {
/// - /// -
Future<void> shareImage({ Future<void> shareImage({
@required Uint8List imageData, String text,
Uint8List imageData,
Uri imageUri,
}) { }) {
assert(imageData != null && imageData.lengthInBytes <= 2 * 1024 * 1024); assert(text == null || text.length <= 1024);
return _channel.invokeMethod( assert((imageData != null && imageData.lengthInBytes <= 2 * 1024 * 1024) ||
_METHOD_SHAREIMAGE, (imageUri != null &&
<String, dynamic>{ imageUri.isScheme(_SCHEME_FILE) &&
_ARGUMENT_KEY_IMAGEDATA: imageData, imageUri.toFilePath().length <= 512 &&
}, File.fromUri(imageUri).lengthSync() <= 10 * 1024 * 1024));
); Map<String, dynamic> map = <String, dynamic>{};
if (text != null && text.isNotEmpty) {
map.putIfAbsent(_ARGUMENT_KEY_TEXT, () => text);
}
if (imageData != null) {
map.putIfAbsent(_ARGUMENT_KEY_IMAGEDATA, () => imageData);
}
if (imageUri != null) {
map.putIfAbsent(_ARGUMENT_KEY_IMAGEURI, () => imageUri.toString());
}
return _channel.invokeMethod(_METHOD_SHAREIMAGE, map);
} }
/// - /// -