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

}
相关推荐
xcyxiner4 小时前
flutter 运行到模拟器上
android·前端·flutter
末代iOS程序员华仔5 小时前
iOS 语聊直播/聊天APP4.3条例被拒解决
flutter·ios·swift
恋猫de小郭5 小时前
Dart 3.13 的到底改了什么?为什么很重要?有什么坑?
android·前端·flutter
xcyxiner1 天前
flutter wsl2安装记录(使用宿主机虚拟机)
前端·flutter
Kevin Coding1 天前
JsonConvert:适用于 Android、鸿蒙与 Flutter 的 JSON 转 Model 插件
android·flutter·harmonyos
iFlyCai2 天前
Flutter原理深度解析:从架构到渲染的全面剖析(二)
flutter·flutter 三棵树
里欧跑得慢2 天前
CSS 模块化架构的演进:BEM、CSS Modules 到 CSS-in-JS 的反思
前端·css·flutter·web·css-in-js
iFlyCai2 天前
深入理解Flutter:StatefulWidget生命周期全解析(一)
flutter·dart·状态管理·statefulwidget
xiangxiongfly9152 天前
Flutter video_player总结
flutter·video_player·chewie
见山是山-见水是水3 天前
鸿蒙版 Flutter Video 视频播放组件:播放控制、全屏切换与倍速播放
flutter·音视频·harmonyos