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

}
相关推荐
ujainu6 小时前
Flutter + OpenHarmony 游戏开发进阶:用户输入响应——GestureDetector 实现点击发射
flutter·游戏·openharmony
hudawei9967 小时前
TweenAnimationBuilder和AnimatedBuilder两种动画的比较
flutter·ui·动画·tweenanimation·animatedbuilder
ujainu7 小时前
Flutter + OpenHarmony 实现无限跑酷游戏开发实战—— 对象池化、性能优化与流畅控制
flutter·游戏·性能优化·openharmony·endless runner
ZH15455891318 小时前
Flutter for OpenHarmony Python学习助手实战:自动化脚本开发的实现
python·学习·flutter
晚烛9 小时前
CANN + 物理信息神经网络(PINNs):求解偏微分方程的新范式
javascript·人工智能·flutter·html·零售
一起养小猫9 小时前
Flutter for OpenHarmony 实战:扫雷游戏完整开发指南
flutter·harmonyos
晚烛10 小时前
CANN 赋能智慧医疗:构建合规、高效、可靠的医学影像 AI 推理系统
人工智能·flutter·零售
晚霞的不甘10 小时前
揭秘 CANN 内存管理:如何让大模型在小设备上“轻装上阵”?
前端·数据库·经验分享·flutter·3d
小哥Mark12 小时前
Flutter开发鸿蒙年味 + 实用实战应用|绿色烟花:电子烟花 + 手持烟花
flutter·华为·harmonyos
一只大侠的侠13 小时前
Flutter开源鸿蒙跨平台训练营 Day 3
flutter·开源·harmonyos