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

準(zhǔn)備:
  1. 微信開(kāi)放平臺(tái):https://open.weixin.qq.com
  2. 需要拿到的參數(shù):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);//注冊(cè) 
    }

    //點(diǎn)擊事件
    private void shareMiNiToWeChat(){
        WXMiniProgramObject miniProgram = new WXMiniProgramObject();
        miniProgram.webpageUrl=web鏈接; // 低版本或者pad使用這個(gè)鏈接,必填不然調(diào)不起微信
        miniProgram.userName=小程序原始Id; // 小程序原始Id
        miniProgram.path = 我是小程序頁(yè)面地址; //小程序頁(yè)面路徑 需要參數(shù)直接 用?后面拼接
        WXMediaMessage mediaMessage = new WXMediaMessage(miniProgram);
        mediaMessage.title =我是一個(gè)標(biāo)題;//分享出去后的標(biāo)題
        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); // 這行報(bào)錯(cuò) bmpToByteArray()方法在下面
        SendMessageToWX.Req req = new SendMessageToWX.Req();
        req.transaction = "";
        req.scene = SendMessageToWX.Req.WXSceneSession;//分享到會(huì)話聊天
        req.message = mediaMessage;
        api.sendReq(req);
    }

    // 可以放到自己的工具類中 微信規(guī)定圖片不能大于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;
    }
二、分享到朋友圈

小程序類型分享只支持分享小程序類型消息至?xí)?,暫不支持分享至朋友圈,所以沒(méi)法通過(guò)改變scene來(lái)分享到朋友圈。

分享到對(duì)話: 
SendMessageToWX.Req.WXSceneSession 
分享到朋友圈: 
SendMessageToWX.Req.WXSceneTimeline ; 
分享到收藏: 
SendMessageToWX.Req.WXSceneFavorite

目前常見(jiàn)的作法是用分享圖片小程序碼的方式,那么我們需要準(zhǔn)備的東西就是小程序碼了,這個(gè)小程序碼讓后臺(tái)生成返回就行。
生成小程序碼文檔地址:https://developers.weixin.qq.com/miniprogram/dev/api-backend/wxacode.getUnlimited.html

    // token 獲取的方法自行百度   Getwxacodeunlimit  就是文檔中的參數(shù)
    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);//連接超時(shí) 單位毫秒
//             conn.setReadTimeout(2000);//讀取超時(shí) 單位毫秒
            // 發(fā)送POST請(qǐng)求必須設(shè)置如下兩行
            httpURLConnection.setDoOutput(true);
            httpURLConnection.setDoInput(true);
            // 獲取URLConnection對(duì)象對(duì)應(yīng)的輸出流
            PrintWriter printWriter = new PrintWriter(httpURLConnection.getOutputStream());
            // 發(fā)送請(qǐng)求參數(shù)
            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();
            //開(kāi)始獲取數(shù)據(jù)
            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 ,獲取到后臺(tái)返回的數(shù)據(jù)后可以到這個(gè)網(wǎng)站http://imgbase64.duoshitong.com/解析出圖片,格式為:data:image/jpeg;base64, + 后臺(tái)返回字符串。
base64轉(zhuǎn)圖片代碼如下,需要注意的是后臺(tái)返回的字符串有開(kāi)頭沒(méi)有 data:image/jpeg;base64,

/**
     * base64轉(zhuǎn)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后就可以根據(jù)ui拼接出自己的分享海報(bào)了。

    // 分享到朋友圈 其實(shí)就是分享圖片
    private void shareMiNiToTimeLine(){
        //圖片資源
        Bitmap bmp = BitmapFactory.decodeResource(getResources(), R.drawable.send_img);
        //初始化 WXImageObject 和 WXMediaMessage 對(duì)象
        WXImageObject imgObj = new WXImageObject(bmp);
        WXMediaMessage msg = new WXMediaMessage();
        msg.mediaObject = imgObj;

        //設(shè)置縮略圖
        Bitmap thumbBmp = Bitmap.createScaledBitmap(bmp, THUMB_SIZE, THUMB_SIZE, true);
        bmp.recycle();
        msg.thumbData = WXUtil.bmpToByteArray(thumbBmp, true);

        //構(gòu)造一個(gè)Req
        SendMessageToWX.Req req = new SendMessageToWX.Req();
        req.transaction = buildTransaction("img");
        req.message = msg;
        req.scene = SendMessageToWX.Req.WXSceneTimeline;
        //調(diào)用api接口,發(fā)送數(shù)據(jù)到微信
        api.sendReq(req);
    }
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容