flutter分享到支付宝

应该很少有人做分享到支付宝吧,哈哈。 太小众了。

我是用的这个: 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();
    }

}
相关推荐
火柴就是我9 小时前
flutter 之真手势冲突处理
android·flutter
Speed1239 小时前
`mockito` 的核心“打桩”规则
flutter·dart
法的空间9 小时前
Flutter JsonToDart 支持 JsonSchema
android·flutter·ios
恋猫de小郭9 小时前
Android 将强制应用使用主题图标,你怎么看?
android·前端·flutter
玲珑Felone10 小时前
从flutter源码看其渲染机制
android·flutter
ALLIN1 天前
Flutter 三种方式实现页面切换后保持原页面状态
flutter
Dabei1 天前
Flutter 国际化
flutter
Dabei1 天前
Flutter MQTT 通信文档
flutter
Dabei1 天前
Flutter 中实现 TCP 通信
flutter
孤鸿玉1 天前
ios flutter_echarts 不在当前屏幕 白屏修复
flutter