美文网首页
android 分享小程序到微信聊天、朋友圈,java生成小程序

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

作者: 罗宾船长 | 来源:发表于2019-05-10 19:34 被阅读0次
    准备:
    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);
        }
    

    相关文章

      网友评论

          本文标题:android 分享小程序到微信聊天、朋友圈,java生成小程序

          本文链接:https://www.haomeiwen.com/subject/uvuwoqtx.html