위챗 공유 안내서

10783 단어 Android위챗
위챗 공유
CSDN 블로그는 Mark Down을 처음 써봐요. 문법이 달라요. 이쪽은 지원하지 않는 게 많아요. 이렇게 됐어요...
https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&id=open1419317340&token=&lang=zh_CN(공식 문서)
1 . ### 사전 준비 작업* 위챗 공유 sdk 준비, 위챗 결제와 같은 sdk * 권한이니 뭐니 * APPID와 앱 번호 같은 등록(앱에 등록하는 것이 가장 좋다. 이렇게 하면 위챗 결제와 위챗 공유가 위챗api 대상을 직접 얻을 수 있다)
public static IWXAPI wXapi;

//    ,       
wXapi = WXAPIFactory.createWXAPI(this, Constants.WX_APPID);
wXapi.registerApp(Constants.WX_APPID);

2 . ### 프런트엔드 이전의 커뮤니케이션 준비 작업과 위챗 공유는 두 가지 상황으로 나뉘는데...* #### 첫 번째: 로컬 APP 내에서 위챗 공유(전단 필요 없음)
이 경우 팝윈도 레이아웃을 로컬로 만들고 팝윈도 논리와 관련된 클래스를 만들어야 합니다.
위챗 친구와 위챗 모멘트 icon 자원:
https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&id=open1419319171&token=&lang=zh_CN주의해야 할 것은 위챗 모멘트의 사진 크기가 600 x 600이므로 미용사를 찾아 처리해야 한다는 것이다
스스로 만든 팝윈도의 클릭 감청을 통해 클릭한 index를 획득하여 위챗 친구인지 위챗 모멘트인지 알 수 있습니다.공유 논리에 전달...
4
  • ####두 번째: 로컬 APP 내 html5 페이지에서 위챗 공유(전단과 의사소통이 필요함)
  • 이 경우 JS에서 JAVA End를 호출해야 합니다.
    JAVA단
    /**
    *"Android"     ,      
    *API17   ,    @JavascriptInterface  
    *webView  settings.setJavaScriptEnabled(true);
    */
    webView.addJavascriptInterface(new JSInterface (),"Android");
    
    class JSInterface {
        @JavascriptInterface
         public void shareToWX(String title, String description, String url, String shareIndex, String imgurl){
             //           , JS  
         }
    }

    JS단
    해당되는 button | div 등의 구성 요소 onclick에 해당되는 function
    var u = navigator.userAgent;
    var isAndroid = u.indexOf('Android') > -1 || u.indexOf('Adr') > -1; //android  
    var isiOS = !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/); //ios  
    if(isAndroid) {
        window.Android.shareToWX("    ", "    ", url, shareIndex, imgUrl);
    } else if(isiOS) {
        shareToWX("    ", "    ", url, shareIndex, imgUrl);
    }

    에이전트를 통해 현재 OS를 검색합니다.window.약속한 이름.약속된 호출 방법 이름 (필요한 매개 변수) 을 호출합니다.
    JS측에서 전달하는 매개 변수는 바로 위챗으로 필요한 내용을 공유하는 것입니다. html5페이지의 내용이기 때문에 JS를 통해서만 전달할 수 있습니다.
    3 . ### api 호출 위챗 공유
    WXWebpageObject webpage = new WXWebpageObject();
    webpage.webpageUrl = url;
    
    WXMediaMessage msg = new WXMediaMessage(webpage);
    msg.title = title;
    msg.description = description;
    
    Bitmap bmp = BitmapUtils.getbitmap(imgurl);
    Bitmap thumbBmp = Bitmap.createScaledBitmap(bmp, THUMB_SIZE, THUMB_SIZE, true);
    bmp.recycle();
    msg.thumbData = BitmapUtils.bmpToByteArray(thumbBmp, true);
    
    SendMessageToWX.Req req = new SendMessageToWX.Req();
    req.transaction = buildTransaction("webpage");
    req.message = msg;
    
    //0         ,1          
    if (Integer.parseInt(shareIndex) == 0) {
        mTargetScene = SendMessageToWX.Req.WXSceneSession;
    } else if (Integer.parseInt(shareIndex) == 1) {
        mTargetScene = SendMessageToWX.Req.WXSceneTimeline;
    }
    req.scene = mTargetScene;
    MyBaseApplication.wXapi.sendReq(req);
    
    finish();

    주의해야 할 것은 공유된 내용 유형에 따라 WXMediaMessage를 만들 때 서로 다른 값을 전송하는 것이다.
    예: 웹 페이지 웹 페이지, 텍스트 text 등...
    scence 처리...
    로컬 pop Window의 클릭 감청 또는 JS단 감청을 통해 전달되는 index를 선택합니다
    4 . #### 위챗 공유 결과 리셋 처리 위챗 공유 결과 리셋 처리는 위챗 결제와 유사하므로 반드시com에 있어야 합니다.xxx.xapi 패키지 이름에 고정된 클래스 이름을 만듭니다
    위챗 결제는 WXPay Entry Activity입니다.
    위챗은 WXEntryActivity를 공유합니다.
    위챗 결제 결과 처리 페이지와 마찬가지로 IWXAPIEventHandler 인터페이스를 실현하고... 두 가지 방법을 다시 씁니다.
    주요:
    @Override
        public void onResp(BaseResp baseResp) {
            int result = 0;
    
            switch (baseResp.errCode) {
                case BaseResp.ErrCode.ERR_OK:
                    result = R.string.wx_share_notice_success;
                    break;
                case BaseResp.ErrCode.ERR_USER_CANCEL:
                    result = R.string.wx_share_notice_cancel;
                    break;
                case BaseResp.ErrCode.ERR_AUTH_DENIED:
                    result = R.string.wx_share_notice_deny;
                    break;
                default:
                    result = R.string.wx_share_notice_unkown;
                    break;
            }
    
            ToastUtils.show(this, result);
            finish();
        }

    마지막으로 목록 파일에 Activity를 등록해야 하며 추가해야 합니다.android:exported=”true”
    OVER…..
    5 . #### 코드의 혼동
    -keepclassmembers class   $    {
    
          public *;
    
    }
    
    -keepattributes  *JavascriptInterface*
    

    6 . #### 기타 관련
    private String buildTransaction(final String type) {
            return (type == null) ? String.valueOf(System.currentTimeMillis()) : type + System.currentTimeMillis();
        }
    
    
    
    public class BitmapUtils {
    
        public static byte[] bmpToByteArray(final Bitmap bmp, final boolean needRecycle) {
            ByteArrayOutputStream output = new ByteArrayOutputStream();
            bmp.compress(Bitmap.CompressFormat.PNG, 100, output);
            if (needRecycle) {
                bmp.recycle();
            }
    
            byte[] result = output.toByteArray();
            try {
                output.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
    
            return result;
        }
    
        public static Bitmap getbitmap(String imageUri) {
            //         
            Bitmap bitmap = null;
            try {
                URL myFileUrl = new URL(imageUri);
                HttpURLConnection conn = (HttpURLConnection) myFileUrl
                        .openConnection();
                conn.setDoInput(true);
                conn.connect();
                InputStream is = conn.getInputStream();
                bitmap = BitmapFactory.decodeStream(is);
                is.close();
    
            } catch (OutOfMemoryError e) {
                e.printStackTrace();
                bitmap = null;
            } catch (IOException e) {
                e.printStackTrace();
                bitmap = null;
            }
            return bitmap;
        }
    }

    좋은 웹페이지 즐겨찾기