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();
    }

}
相关推荐
会煮咖啡的猫1 小时前
编写 Flutter 游戏摇杆组件
flutter
来来走走1 小时前
Flutter dart运算符
android·前端·flutter
风清云淡_A1 小时前
【Flutter3.8x】flutter从入门到实战基础教程(五):Material Icons图标的使用
前端·flutter
阳光明媚sunny3 小时前
Flutter基础知识
flutter
新镜3 小时前
【Flutter】双路视频播放方案
flutter·音视频
用户736004375561 天前
【Flutter 必备插件】HTTP 封装 dio
flutter
风清云淡_A1 天前
【Flutter3.8x】flutter从入门到实战基础教程(四):自定义实现一个自增的StatefulWidget组件
前端·flutter
叽哥1 天前
dart学习第1节: 变量与数据类型 —— 程序的 “基本元素”
flutter
喝拿铁写前端2 天前
Flutter 学习笔记 - 搭建(macOS 版)
前端·flutter