应该很少有人做分享到支付宝吧,哈哈。 太小众了。
我是用的这个: https://pub.dev/packages/alipay_share_supplyuuu
但是它写得有毛病,连个 example 都懒得写啊这人。
他的问题主要在android里面,先把它写的kotlin给删掉,完全没有用啊。
再把他写的 FlutterAppopenPlugin改成新的写法, 他这个老的了, 不能用
Dart
package com.yunupay.apopen;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.util.Log;
import android.widget.Toast;
import android.content.Context;
import io.flutter.embedding.engine.plugins.FlutterPlugin;
import io.flutter.plugin.common.MethodCall;
import io.flutter.plugin.common.MethodChannel;
import io.flutter.plugin.common.MethodChannel.MethodCallHandler;
import io.flutter.plugin.common.MethodChannel.Result;
import io.flutter.plugin.common.PluginRegistry.Registrar;
import com.alipay.share.sdk.openapi.APImageObject;
import com.alipay.share.sdk.openapi.APWebPageObject;
import com.alipay.share.sdk.openapi.IAPApi;
import com.alipay.share.sdk.openapi.APTextObject;
import com.alipay.share.sdk.openapi.APMediaMessage;
import com.alipay.share.sdk.openapi.SendMessageToZFB;
import com.alipay.share.sdk.openapi.APAPIFactory;
import java.util.HashMap;
import java.util.Map;
/**
* FlutterNativeLogPlugin
*/
@SuppressWarnings("unchecked")
public class FlutterApopenPlugin implements FlutterPlugin, MethodCallHandler {
private IAPApi _api;
private Context mContext = null;
/**
* Plugin registration.
*/
@Override
public void onAttachedToEngine(FlutterPluginBinding binding) {
if (null == mContext) {
mContext = binding.getApplicationContext();
final MethodChannel channel = new MethodChannel(binding.getBinaryMessenger(), "com.sunpub/apopen");
channel.setMethodCallHandler(new FlutterApopenPlugin());
}
}
@Override
public void onDetachedFromEngine(FlutterPluginBinding binding) {
}
@Override
public void onMethodCall(MethodCall call, Result result) {
if (call.method.equals("registerAp")) {
registerAP(call, result);
}else if (call.method.equals("isAPAppInstalled")) {
isAPAppInstalled(result);
}else if (call.method.equals("shareText")) {
sendTextMessage(call, result);
}else if (call.method.equals("shareImageData")) {
sendImageData(call, result);
}else if (call.method.equals("shareImageUrl")) {
sendImageUrl(call, result);
}else if (call.method.equals("shareWebUrl") || call.method.equals("shareWebData")) {
sendWebPageWithImg(call, result);
} else {
result.notImplemented();
}
}
private void registerAP(MethodCall call, Result result) {
String appId = call.argument("appId");
_api = APAPIFactory.createZFBApi(mContext ,appId,false);
boolean isSupport = _api.isZFBSupportAPI();
System.out.print(isSupport);
Map resultMap = new HashMap();
resultMap.put("platform","Android");
resultMap.put("result",isSupport);
result.success(resultMap);
}
private void isAPAppInstalled(Result result) {
boolean isInstalled = _api.isZFBAppInstalled();
System.out.print(isInstalled);
result.success(isInstalled);
}
//文本信息分享
private void sendTextMessage(MethodCall call, Result result) {
//初始化一个APTextObject对象
APTextObject textObject = new APTextObject();
textObject.text = call.argument("text");
//用APTextObject对象初始化一个APMediaMessage对象
APMediaMessage mediaMessage = new APMediaMessage();
mediaMessage.mediaObject = textObject;
//构造一个Req
SendMessageToZFB.Req req = new SendMessageToZFB.Req();
req.message = mediaMessage;
//调用api接口发送消息到支付宝
boolean boolResult = _api.sendReq(req);
Map resultMap = new HashMap();
resultMap.put("platform","Android");
resultMap.put("result",boolResult);
result.success(resultMap);
}
// 传图片数据
private void sendImageData(MethodCall call, Result result) {
byte[] imageByte = call.argument("imageData");
Bitmap bmp = BitmapFactory.decodeByteArray(imageByte,0,imageByte.length);
APImageObject imageObject = new APImageObject(bmp);
APMediaMessage mediaMessage = new APMediaMessage();
mediaMessage.mediaObject = imageObject;
SendMessageToZFB.Req req = new SendMessageToZFB.Req();
req.message = mediaMessage;
req.transaction = buildTransaction("image");
bmp.recycle();
//调用api接口发送消息到支付宝
boolean boolResult = _api.sendReq(req);
Map resultMap = new HashMap();
resultMap.put("platform","Android");
resultMap.put("result",boolResult);
result.success(resultMap);
}
// 传图片地址
private void sendImageUrl(MethodCall call, Result result) {
APImageObject imageObject = new APImageObject();
imageObject.imageUrl = call.argument("imageUrl");
APMediaMessage mediaMessage = new APMediaMessage();
mediaMessage.mediaObject = imageObject;
SendMessageToZFB.Req req = new SendMessageToZFB.Req();
req.message = mediaMessage;
req.transaction = buildTransaction("image");
//调用api接口发送消息到支付宝
boolean boolResult = _api.sendReq(req);
Map resultMap = new HashMap();
resultMap.put("platform","Android");
resultMap.put("result",boolResult);
result.success(resultMap);
}
// 传网页,图片缩略图为url
private void sendWebPageWithImg(MethodCall call, Result result) {
APWebPageObject webPageObject = new APWebPageObject();
webPageObject.webpageUrl = call.argument("wepageUrl");
APMediaMessage webMessage = new APMediaMessage();
webMessage.title = call.argument("title");
webMessage.description = call.argument("desc");
webMessage.mediaObject = webPageObject;
if(call.method.equals("shareWebData")) {
webMessage.thumbData = call.argument("imageData");
}else {
webMessage.thumbUrl = call.argument("imageUrl");
}
SendMessageToZFB.Req webReq = new SendMessageToZFB.Req();
webReq.message = webMessage;
webReq.transaction = buildTransaction("webpage");
//调用api接口发送消息到支付宝
boolean boolResult = _api.sendReq(webReq);
Map resultMap = new HashMap();
resultMap.put("platform","Android");
resultMap.put("result",boolResult);
result.success(resultMap);
}
private String buildTransaction(final String type) {
return (type == null) ? String.valueOf(System.currentTimeMillis()) : type + System.currentTimeMillis();
}
}