android 分享小程序到微信聊天、朋友圈,java生成小程序分享码

准备:
  1. 微信开放平台:https://open.weixin.qq.com
  2. 需要拿到的参数:AppId小程序原始Id
  3. 接入指南:https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&id=1417751808&token=&lang=zh_CN
  4. 微信demo下载地址:https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&id=open1419319167&token=&lang=zh_CN
一、分享到聊天
    private IWXAPI api;

    // 在Activity的onCreate生命周期中初始化
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.xxx);
        api = WXAPIFactory.createWXAPI(this, null); //初始化api
        api.registerApp(AppId);//注册 
    }

    //点击事件
    private void shareMiNiToWeChat(){
        WXMiniProgramObject miniProgram = new WXMiniProgramObject();
        miniProgram.webpageUrl=web链接; // 低版本或者pad使用这个链接,必填不然调不起微信
        miniProgram.userName=小程序原始Id; // 小程序原始Id
        miniProgram.path = 我是小程序页面地址; //小程序页面路径 需要参数直接 用?后面拼接
        WXMediaMessage mediaMessage = new WXMediaMessage(miniProgram);
        mediaMessage.title =我是一个标题;//分享出去后的标题
        mediaMessage.description = "";//描述
        Bitmap bitmap = BitmapFactory.decodeResource(getResources(),R.drawable.mini_speed_bg);//带图片分享
        Bitmap sendBitmap = Bitmap.createScaledBitmap(bitmap,200,200,true);
        bitmap.recycle();
        mediaMessage.thumbData = WXUtil.bmpToByteArray(sendBitmap,true); // 这行报错 bmpToByteArray()方法在下面
        SendMessageToWX.Req req = new SendMessageToWX.Req();
        req.transaction = "";
        req.scene = SendMessageToWX.Req.WXSceneSession;//分享到会话聊天
        req.message = mediaMessage;
        api.sendReq(req);
    }

    // 可以放到自己的工具类中 微信规定图片不能大于128kb
    public static byte[] bmpToByteArray(final Bitmap bmp, final boolean needRecycle) {
        ByteArrayOutputStream output = new ByteArrayOutputStream();
        bmp.compress(CompressFormat.PNG, 100, output);
        if (needRecycle) {
            bmp.recycle();
        }
        
        byte[] result = output.toByteArray();
        try {
            output.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
        
        return result;
    }
二、分享到朋友圈

小程序类型分享只支持分享小程序类型消息至会话,暂不支持分享至朋友圈,所以没法通过改变scene来分享到朋友圈。

分享到对话: 
SendMessageToWX.Req.WXSceneSession 
分享到朋友圈: 
SendMessageToWX.Req.WXSceneTimeline ; 
分享到收藏: 
SendMessageToWX.Req.WXSceneFavorite

目前常见的作法是用分享图片小程序码的方式,那么我们需要准备的东西就是小程序码了,这个小程序码让后台生成返回就行。
生成小程序码文档地址:https://developers.weixin.qq.com/miniprogram/dev/api-backend/wxacode.getUnlimited.html

    // token 获取的方法自行百度   Getwxacodeunlimit  就是文档中的参数
    public static String getwxacodeunlimit(String access_token, Getwxacodeunlimit getwxacodeunlimit) {
        try {
            URL url = new URL("https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token="+access_token);
            HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
            httpURLConnection.setRequestMethod("POST");// 提交模式
//             conn.setConnectTimeout(10000);//连接超时 单位毫秒
//             conn.setReadTimeout(2000);//读取超时 单位毫秒
            // 发送POST请求必须设置如下两行
            httpURLConnection.setDoOutput(true);
            httpURLConnection.setDoInput(true);
            // 获取URLConnection对象对应的输出流
            PrintWriter printWriter = new PrintWriter(httpURLConnection.getOutputStream());
            // 发送请求参数
            JSONObject paramJson = new JSONObject();
            if(!TextUtils.isEmpty(getwxacodeunlimit.getScene())){
                paramJson.put("scene", getwxacodeunlimit.getScene());
            }
            paramJson.put("page", getwxacodeunlimit.getPage());

            if(getwxacodeunlimit.getLine_color()!=null){
                JSONObject lineColor = new JSONObject();
                lineColor.put("r", getwxacodeunlimit.getLine_color().getR());
                lineColor.put("g", getwxacodeunlimit.getLine_color().getG());
                lineColor.put("b", getwxacodeunlimit.getLine_color().getB());
                paramJson.put("line_color", lineColor);

            }else{
                JSONObject lineColor = new JSONObject();
                lineColor.put("r", 41);
                lineColor.put("g", 191);
                lineColor.put("b", 141);
                paramJson.put("line_color", lineColor);
            }

            printWriter.write(paramJson.toString());
            // flush输出流的缓冲
            printWriter.flush();
            //开始获取数据
            BufferedInputStream bis = new BufferedInputStream(httpURLConnection.getInputStream());
            byte[] bytes = IOUtils.toByteArray(bis);
            String encoded = Base64.getEncoder().encodeToString(bytes);
            return encoded;
        } catch (Exception e) {
            e.printStackTrace();
        }
       return null;
    }

以上是获取微信小程序码图片的 base64 ,获取到后台返回的数据后可以到这个网站http://imgbase64.duoshitong.com/解析出图片,格式为:data:image/jpeg;base64, + 后台返回字符串
base64转图片代码如下,需要注意的是后台返回的字符串有开头没有 data:image/jpeg;base64,

/**
     * base64转bitmap
     * @param string
     * @return
     */
    public static Bitmap stringToBitmap(String string) {
        Bitmap bitmap = null;
        try {
            // 如果你的base64前面有data:image/jpeg;base64,  则使用 string.split(",")[1]
            byte[] bitmapArray = Base64.decode(string, Base64.DEFAULT);
            bitmap = BitmapFactory.decodeByteArray(bitmapArray, 0, bitmapArray.length);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return bitmap;
    }

拿到小程序码的bitmap后就可以根据ui拼接出自己的分享海报了。

    // 分享到朋友圈 其实就是分享图片
    private void shareMiNiToTimeLine(){
        //图片资源
        Bitmap bmp = BitmapFactory.decodeResource(getResources(), R.drawable.send_img);
        //初始化 WXImageObject 和 WXMediaMessage 对象
        WXImageObject imgObj = new WXImageObject(bmp);
        WXMediaMessage msg = new WXMediaMessage();
        msg.mediaObject = imgObj;

        //设置缩略图
        Bitmap thumbBmp = Bitmap.createScaledBitmap(bmp, THUMB_SIZE, THUMB_SIZE, true);
        bmp.recycle();
        msg.thumbData = WXUtil.bmpToByteArray(thumbBmp, true);

        //构造一个Req
        SendMessageToWX.Req req = new SendMessageToWX.Req();
        req.transaction = buildTransaction("img");
        req.message = msg;
        req.scene = SendMessageToWX.Req.WXSceneTimeline;
        //调用api接口,发送数据到微信
        api.sendReq(req);
    }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 195,898评论 5 462
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,401评论 2 373
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 143,058评论 0 325
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,539评论 1 267
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,382评论 5 358
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,319评论 1 273
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,706评论 3 386
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,370评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,664评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,715评论 2 312
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,476评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,326评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,730评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,003评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,275评论 1 251
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,683评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,877评论 2 335

推荐阅读更多精彩内容