提交 f09621e6 authored 作者: JarvanMo's avatar JarvanMo

ios share

上级 bde9d52e
package com.jarvan.fluwx.handler
import android.graphics.Bitmap
import android.graphics.BitmapFactory
import android.util.Log
import com.jarvan.fluwx.R
import com.jarvan.fluwx.constant.CallResult
import com.jarvan.fluwx.constant.WeChatPluginMethods
import com.jarvan.fluwx.constant.WechatPluginKeys
import com.jarvan.fluwx.utils.ShareImageUtil
import com.jarvan.fluwx.utils.Util
import com.jarvan.fluwx.utils.WeChatThumbnailUtil
import com.tencent.mm.opensdk.modelbase.BaseResp
import com.tencent.mm.opensdk.modelmsg.*
......@@ -138,7 +142,8 @@ object WeChatPluginHandler {
launch(UI){
val byteArray :ByteArray? = getImageByteArrayCommon(registrar,imagePath)
val imgObj = if (byteArray != null) {
val imgObj = if (byteArray != null && byteArray.isNotEmpty()) {
WXImageObject(byteArray)
} else {
null
......@@ -153,8 +158,10 @@ object WeChatPluginHandler {
if (thumbnail.isNullOrBlank()){
thumbnail = imagePath
}
// val thumbnailData = getThumbnailByteArrayCommon(registrar,thumbnail!!)
handleShareImage(imgObj,call,null,result)
val bitmap = BitmapFactory.decodeResource(registrar!!.context().resources,R.mipmap.ic_launcher)
val thumbnailData = Util.bmpToByteArray(bitmap,true)
handleShareImage(imgObj,call,thumbnailData,result)
}
}
......
......@@ -44,7 +44,8 @@ public class ShareImageUtil {
bmp = BitmapFactory.decodeFile(path);
result = Util.bmpToByteArray(bmp, true);
} else {
result = handleNetworkImage(registrar, path);
// result = handleNetworkImage(registrar, path);
result = Util.inputStreamToByte(openStream(path));
}
return result;
......@@ -53,10 +54,13 @@ public class ShareImageUtil {
private static byte[] handleNetworkImage(PluginRegistry.Registrar registrar, String path) {
byte[] result = null;
InputStream inputStream = openStream(path);
if (inputStream == null) {
return null;
}
String suffix = ".jpg";
int index = path.lastIndexOf(".");
if (index > 0) {
......
......@@ -441,8 +441,9 @@
"$(inherited)",
"$(PROJECT_DIR)/Flutter",
);
PRODUCT_BUNDLE_IDENTIFIER = com.jarvan.fluwxExample;
PRODUCT_BUNDLE_IDENTIFIER = "com.jarvanmo.fluwx-example";
PRODUCT_NAME = "$(TARGET_NAME)";
USER_HEADER_SEARCH_PATHS = "\"${PROJECT_DIR}/../..\"/** \"${PROJECT_DIR}/../..\"/**";
VERSIONING_SYSTEM = "apple-generic";
};
name = Debug;
......@@ -465,8 +466,9 @@
"$(inherited)",
"$(PROJECT_DIR)/Flutter",
);
PRODUCT_BUNDLE_IDENTIFIER = com.jarvan.fluwxExample;
PRODUCT_BUNDLE_IDENTIFIER = "com.jarvanmo.fluwx-example";
PRODUCT_NAME = "$(TARGET_NAME)";
USER_HEADER_SEARCH_PATHS = "\"${PROJECT_DIR}/../..\"/** \"${PROJECT_DIR}/../..\"/**";
VERSIONING_SYSTEM = "apple-generic";
};
name = Release;
......
......@@ -4,6 +4,8 @@
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>en</string>
<key>CFBundleDisplayName</key>
<string>${PROJECT_NAME}</string>
<key>CFBundleExecutable</key>
<string>$(EXECUTABLE_NAME)</string>
<key>CFBundleIdentifier</key>
......@@ -18,6 +20,19 @@
<string>1.0</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleTypeRole</key>
<string>Editor</string>
<key>CFBundleURLName</key>
<string>weixin</string>
<key>CFBundleURLSchemes</key>
<array>
<string>wxd930ea5d5a258f4f</string>
</array>
</dict>
</array>
<key>CFBundleVersion</key>
<string>1</string>
<key>LSRequiresIPhoneOS</key>
......@@ -41,5 +56,16 @@
</array>
<key>UIViewControllerBasedStatusBarAppearance</key>
<false/>
<key>LSApplicationQueriesSchemes</key>
<array>
<string>weixin</string>
</array>
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
</dict>
</plist>
......@@ -17,8 +17,8 @@ class _MyAppState extends State<MyApp> {
void initState() {
super.initState();
// initPlatformState();
Fluwx.init("wxd930ea5d5a258f4f").then((_) {
print("succes");
Fluwx.init("wxd930ea5d5a258f4f").then((result) {
print("succes-->$result");
}, onError: (value) {
print("--->$value");
});
......@@ -55,12 +55,7 @@ class _MyAppState extends State<MyApp> {
child: new FlatButton(
onPressed: () {
var fluwx = Fluwx();
fluwx.share(WeChatShareImageModel(
image: "https://timgsa.baidu.com/timg?image&quality=80&size=b10000_10000&sec=1534342262&di=ae1078c9080282ec8bbd4909e6669ee2&src=http://img4q.duitang.com/uploads/item/201402/19/20140219123329_QkdNy.jpeg",
transaction: "hehe",
title: "from dart",
scene: WeChatScene.SESSION
));
fluwx.share(WeChatShareTextModel(text: "hehe"));
},
child: new Text("share text to wechat")),
),
......
#import <Flutter/Flutter.h>
@class FluwxShareHandler;
extern BOOL isWeChatRegistered;
@interface FluwxPlugin : NSObject<FlutterPlugin>
@interface FluwxPlugin : NSObject<FlutterPlugin> {
@private
FluwxShareHandler *_fluwxShareHandler;
}
@end
......@@ -2,10 +2,9 @@
#import "FluwxMethods.h"
#import "WXApi.h"
#import "StringUtil.h"
#import "CallResults.h"
#import "WXApiRequestHandler.h"
#import "FluwxKeys.h"
#import "StringToWeChatScene.h"
#import "../../../../../../ios/Classes/handler/FluwxShareHandler.h"
#import "FluwxShareHandler.h"
#import "FluwxShareHandler.h"
@implementation FluwxPlugin
......@@ -17,70 +16,54 @@ BOOL isWeChatRegistered = NO;
FlutterMethodChannel *channel = [FlutterMethodChannel
methodChannelWithName:@"fluwx"
binaryMessenger:[registrar messenger]];
FluwxPlugin *instance = [[FluwxPlugin alloc] init];
FluwxPlugin *instance = [[FluwxPlugin alloc] initWithRegistrar:registrar];
[registrar addMethodCallDelegate:instance channel:channel];
}
-(instancetype) initWithRegistrar:(NSObject<FlutterPluginRegistrar> *)registrar {
self = [super init];
if (self) {
_fluwxShareHandler = [[FluwxShareHandler alloc] initWithRegistrar:registrar];
}
return self;
}
- (void)handleMethodCall:(FlutterMethodCall *)call result:(FlutterResult)result {
if ([initWeChat isEqualToString:call.method]) {
[self initWeChatIfNeeded:call result:result];
} else if ([call.method hasPrefix:@"share"]) {
[self handleShare:call result:result];
} if ([call.method hasPrefix:@"share"]) {
[_fluwxShareHandler handleShare:call result:result];
} else {
result(FlutterMethodNotImplemented);
}
}
- (void)initWeChatIfNeeded:(FlutterMethodCall *)call result:(FlutterResult)result {
if (isWeChatRegistered) {
result(resultDone);
result(@YES);
return;
}
NSString *appId = call.arguments;
NSLog(appId);
if ([StringUtil isBlank:appId]) {
result([FlutterError errorWithCode:@"invalid app id" message:@"are you sure your app id is correct ? " details:appId]);
return;
}
[WXApi registerApp:appId];
result(resultDone);
}
- (void)handleShare:(FlutterMethodCall *)call result:(FlutterResult)result {
if (!isWeChatRegistered) {
result([FlutterError errorWithCode:resultErrorNeedWeChat message:resultMessageNeedWeChat details:nil]);
return;
}
if ([shareText isEqualToString:call.method]) {
[self shareText:call result:result];
} else if([shareImage isEqualToString:call.method]){
[self shareImage:call result:result];
result(FlutterMethodNotImplemented);
}
}
- (void)shareText:(FlutterMethodCall *)call result:(FlutterResult)result {
NSString *text = call.arguments[fluwxKeyText];
NSString *scene = call.arguments[fluwxKeyScene];
BOOL done = [WXApiRequestHandler sendText:text InScene:[StringToWeChatScene toScene:scene]];
result(@(done));
}
- (void)shareImage:(FlutterMethodCall *)call result:(FlutterResult)result {
NSString *text = call.arguments[fluwxKeyText];
NSString *scene = call.arguments[fluwxKeyScene];
BOOL done = [WXApiRequestHandler sendText:text InScene:[StringToWeChatScene toScene:scene]];
result(@(done));
isWeChatRegistered = [WXApi registerApp:appId];
result(@YES);
}
......
......@@ -18,5 +18,10 @@ extern NSString *const fluwxKeyDescription;
extern NSString *const fluwxKeyPackage;
extern NSString *const fluwxKeyMessageExt;
extern NSString *const fluwxKeyMediaTagName;
extern NSString *const fluwxKeyMessageAction;
@interface FluwxKeys : NSObject
@end
\ No newline at end of file
......@@ -18,6 +18,10 @@ NSString *const fluwxKeyDescription = @"description";
NSString *const fluwxKeyPackage = @"?package=";
NSString *const fluwxKeyMessageExt =@"messageExt";
NSString *const fluwxKeyMediaTagName = @"mediaTagName ";
NSString *const fluwxKeyMessageAction = @"messageAction";
@implementation FluwxKeys {
}
......
//
// Created by mo on 2018/8/16.
//
#import <Foundation/Foundation.h>
extern NSString *const SCHEMA_ASSETS;
extern NSString *const SCHMEA_HTTP;
extern NSString *const SCHMEA_HTTPS;
extern NSString *const SCHEMA_FILE;
@interface ImageSchema : NSObject
@end
\ No newline at end of file
//
// Created by mo on 2018/8/16.
//
#import "ImageSchema.h"
NSString *const SCHEMA_ASSETS = @ "assets://";
NSString *const SCHMEA_HTTP = @"http://";
NSString *const SCHMEA_HTTPS = @"https://";
NSString *const SCHEMA_FILE = @"file://";
@implementation ImageSchema
@end
\ No newline at end of file
//
// Created by mo on 2018/8/16.
//
#import <Foundation/Foundation.h>
#import "CallResults.h"
#import "WXApiRequestHandler.h"
#import "FluwxKeys.h"
#import "StringToWeChatScene.h"
#import "WXApi.h"
#import "FluwxMethods.h"
#import <Flutter/Flutter.h>
#import "FluwxPlugin.h"
@class StringUtil;
@interface FluwxShareHandler : NSObject
-(instancetype) initWithRegistrar:(NSObject<FlutterPluginRegistrar> *)registrar;
- (void)handleShare:(FlutterMethodCall *)call result:(FlutterResult)result;
@end
\ No newline at end of file
//
// Created by mo on 2018/8/16.
//
#import "FluwxShareHandler.h"
#import "ImageSchema.h"
#import "StringUtil.h"
@implementation FluwxShareHandler
NSObject <FlutterPluginRegistrar> *_registrar;
- (instancetype)initWithRegistrar:(NSObject <FlutterPluginRegistrar> *)registrar {
self = [super init];
if (self) {
_registrar = registrar;
}
return self;
}
- (void)handleShare:(FlutterMethodCall *)call result:(FlutterResult)result {
if (!isWeChatRegistered) {
result([FlutterError errorWithCode:resultErrorNeedWeChat message:resultMessageNeedWeChat details:nil]);
return;
}
if (![WXApi isWXAppInstalled]) {
result([FlutterError errorWithCode:@"wechat not installed" message:@"wechat not installed" details:nil]);
return;
}
if ([shareText isEqualToString:call.method]) {
[self shareText:call result:result];
} else if ([shareImage isEqualToString:call.method]) {
[self shareImage:call result:result];
} else if ([shareWebPage isEqualToString:call.method]) {
[self shareWebPage:call result:result];
}
}
- (void)shareText:(FlutterMethodCall *)call result:(FlutterResult)result {
NSString *text = call.arguments[fluwxKeyText];
NSString *scene = call.arguments[fluwxKeyScene];
BOOL done = [WXApiRequestHandler sendText:text InScene:[StringToWeChatScene toScene:scene]];
result(@(done));
}
- (void)shareImage:(FlutterMethodCall *)call result:(FlutterResult)result {
NSString *imagePath = call.arguments[fluwxKeyImage];
if ([imagePath hasPrefix:SCHEMA_ASSETS]) {
} else if ([imagePath hasPrefix:SCHEMA_FILE]) {
} else {
[self shareNetworkImage:call result:result imagePath:imagePath];
}
NSString *text = call.arguments[fluwxKeyText];
NSString *scene = call.arguments[fluwxKeyScene];
BOOL done = [WXApiRequestHandler sendText:text InScene:[StringToWeChatScene toScene:scene]];
result(@(done));
}
- (void)shareNetworkImage:(FlutterMethodCall *)call result:(FlutterResult)result imagePath:(NSString *)imagePath {
NSString *thumbnail = call.arguments[fluwxKeyThumbnail];
if ([StringUtil isBlank:thumbnail]) {
thumbnail = imagePath;
}
dispatch_queue_t globalQueue = dispatch_get_global_queue(0, 0);
dispatch_async(globalQueue, ^{
NSURL *imageURL = [NSURL URLWithString:imagePath];
//下载图片
NSData *imageData = [NSData dataWithContentsOfURL:imageURL];
NSData *thumbnailData;
UIImage *thumbnailImage;
if ([thumbnail hasPrefix:SCHEMA_ASSETS]) {
} else if ([thumbnail hasPrefix:SCHEMA_FILE]) {
} else {
NSURL *thumbnailURL = [NSURL URLWithString:thumbnail];
thumbnailData = [NSData dataWithContentsOfURL:thumbnailURL];
if ([thumbnailData length] > (32 * 1024)) {
} else {
thumbnailImage = [UIImage imageWithData:thumbnailData];
}
}
dispatch_async(dispatch_get_main_queue(), ^{
NSString *scene = call.arguments[fluwxKeyScene];
BOOL done = [WXApiRequestHandler sendImageData:imageData
TagName:call.arguments[fluwxKeyMediaTagName]
MessageExt:fluwxKeyMessageExt
Action:fluwxKeyMessageAction
ThumbImage:thumbnailImage
InScene:[StringToWeChatScene toScene:scene]];
result(@(done));
});
});
}
- (void)shareWebPage:(FlutterMethodCall *)call result:(FlutterResult)result {
NSString *webPageUrl = call.arguments[@"webPage"];
NSString *imagePath = call.arguments[fluwxKeyImage];
if ([imagePath hasPrefix:SCHEMA_ASSETS]) {
} else if ([imagePath hasPrefix:SCHEMA_FILE]) {
} else {
[self shareNetworkImage:call result:result imagePath:imagePath];
}
NSString *text = call.arguments[fluwxKeyText];
NSString *scene = call.arguments[fluwxKeyScene];
BOOL done = [WXApiRequestHandler sendText:text InScene:[StringToWeChatScene toScene:scene]];
result(@(done));
}
@end
\ No newline at end of file
//
// Created by mo on 2018/8/16.
//
#import <Foundation/Foundation.h>
#import "ImageSchema.h"
#import "FluwxKeys.h"
@interface FlutterAssetHelper : NSObject @end
\ No newline at end of file
//
// Created by mo on 2018/8/16.
//
#import "FlutterAssetHelper.h"
@implementation FlutterAssetHelper
+ (NSString *)getPackageName:(NSString *)assetPath {
NSUInteger length = SCHEMA_ASSETS.length;
return @"";
}
+ (NSString *)getPath:(NSString *)assetPath {
NSUInteger schemaLength = SCHEMA_ASSETS.length;
NSUInteger totalLength = assetPath.length;
NSRange range = NSMakeRange(schemaLength, totalLength-schemaLength);
NSString *result = [assetPath substringWithRange:range];
if ([result rangeOfString:fluwxKeyPackage].location != NSNotFound) {
result = [result stringByReplacingCharactersInRange:<#(NSRange)range#> withString:<#(NSString *)replacement#>]
}
return result;
}
@end
\ No newline at end of file
......@@ -29,12 +29,15 @@
MessageExt:(NSString *)messageExt
Action:(NSString *)action
ThumbImage:(UIImage *)thumbImage
InScene:(enum WXScene)scene {
InScene:(enum WXScene)scene
title:(NSString *) title
description:(NSString *) description
{
WXImageObject *ext = [WXImageObject object];
ext.imageData = imageData;
WXMediaMessage *message = [WXMediaMessage messageWithTitle:nil
Description:nil
WXMediaMessage *message = [WXMediaMessage messageWithTitle:title
Description:description
Object:ext
MessageExt:messageExt
MessageAction:action
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论