위챗 공유 친구 + 모멘트 개발 문서

25168 단어 Android공구.
위챗 공유 친구 + 모멘트
  • 준비
  • 자원 신청
  • 구성 AS
  • 비고
  • 준비 작업
    자원 신청
    위챗 오픈 플랫폼 계정을 신청하고 자신의 AppID 주소를 신청하여 개발 자원을 준비합니다.
  • 개발 도구 패키지android 프로젝트, 의존 라이브러리 2018.12.12 최신implementation'com.tencent.mm.opensdk:wechat-sdk-android-with-mta:5.1.6’
  • 샘플 코드
  • 필요한 서명 파일과 도구는 자신의 서명 파일과 서명 수령 도구 다운로드 주소를 준비한다
  • 시각 디자인 자원
  • WeDemo 오픈 소스 프로젝트
  • AS 구성
  • AndroidManifest.xml 설정에 필요한 권한 지원 추가
  • <uses-permission android:name="android.permission.INTERNET"/>
    
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
    
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
    
    <uses-permission android:name="android.permission.READ_PHONE_STATE"/>
    
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    
  • 위챗에 등록
  • // APP_ID                   appID
    private static final String APP_ID = "wx88888888";
    
    // IWXAPI     app      openApi  
    private IWXAPI api;
    
    private regToWx() {
        //   WXAPIFactory  ,  IWXAPI   
        api = WXAPIFactory.createWXAPI(this, APP_ID, true);
    
        //     appId     
        api.registerApp(APP_ID);
    }
    
  • 요청을 보내거나 위챗에 응답할 때 프로그램이 요청을 보내거나 위챗 단말기에 응답을 보내려면 IWXAPI의sendReq와sendResp 두 가지 방법으로 할 수 있습니다.

  • boolean sendReq(BaseReq req);
    sendReq는 제3자 앱이 자발적으로 위챗에 메시지를 보내고 발송이 완료되면 제3자 앱 인터페이스로 전환한다.
    boolean sendResp(BaseResp resp);
    sendResp는 위챗이 제3자 앱에 데이터를 요청하고 제3자 앱이 데이터에 응답한 후에 위챗 인터페이스로 전환한다.
    sendReq의 구현 예는 다음 그림과 같습니다.
    /      WXTextObject   ,         
    WXTextObject textObj = new WXTextObject();
    textObj.text = text;
    
    //  WXTextObject         WXMediaMessage   
    WXMediaMessage msg = new WXMediaMessage();
    msg.mediaObject = textObj;
    msg.description = text;
    
    SendMessageToWX.Req req = new SendMessageToWX.Req();
    req.transaction = String.valueOf(System.currentTimeMillis());  //transaction            
    req.message = msg;
    req.scene = mTargetScene; 
    
    //  api  ,       
    api.sendReq(req);
    

    scene 필드 int 형식 상수, 메시지를 보내는 목적의 문서에서 지정한 상수를 대화에 공유합니다: SendMessageToWX.Req.WXSceneSession 모멘트에 공유:SendMessageToWX.Req.WXSceneTimeline ; 모음집에 공유: SendMessageToWX.Req.WXSceneFavorite
    checkArgs fail, thumbData is invalid 오류 원인, WXWebpageObject웹 페이지 축소판 그림, 32K 이하의 크기를 요구하는 기존 방법인 Bitmap thumbBmp = BitmapFactory.decodeResource(getResources(), R.drawable.send_music_thumb) 항상 기준치를 초과하면 미리 보기 그림 크기를 스스로 조절합니다
    Bitmap thumbBmp = Bitmap.createScaledBitmap(getBitmap(context,R.drawable.page_title),120,120,true);
    //              svg,   5.0        
        private Bitmap getBitmap(Context context,int vectorDrawableId) {
            Bitmap bitmap = null;
            if (Build.VERSION.SDK_INT > Build.VERSION_CODES.LOLLIPOP) {
                Drawable vectorDrawable = context.getDrawable(vectorDrawableId);
                bitmap = Bitmap.createBitmap(vectorDrawable.getIntrinsicWidth(),
                        vectorDrawable.getIntrinsicHeight(), Bitmap.Config.ARGB_8888);
                Canvas canvas = new Canvas(bitmap);
                vectorDrawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight());
                vectorDrawable.draw(canvas);
            } else {
                bitmap = BitmapFactory.decodeResource(context.getResources(), vectorDrawableId,new BitmapFactory.Options());
            }
            return bitmap;
        }
    
  • 위챗 수신 요청 및 반환값 만약 프로그램이 위챗 발송 요청을 수신하거나 위챗 요청에 대한 응답 결과를 수신하려면 다음과 같은 3단계가 필요합니다.패키지 이름에 해당하는 디렉터리에 wxapi 디렉터리를 새로 만들고, 이 wxapi 디렉터리에 WXEntryActivity 클래스를 추가합니다. 이 클래스는Activity
  • 에서 계승됩니다.
    <activity
        android:name=".wxapi.WXEntryActivity"
        android:label="@string/app_name"
        android:theme="@android:style/Theme.Translucent.NoTitleBar"
        android:exported="true"
        android:taskAffinity="net.sourceforge.simcpux"
        android:launchMode="singleTask">
    activity>
    

    2. IWXAPIEventHandler 인터페이스를 실현하고 위챗으로 보낸 요청은 onReq 방법으로 리셋하고 위챗으로 보낸 요청의 응답 결과는 onResp 방법으로 리셋 방법은 처리가 끝난 후finish()의 현재 활동을 기억한다.WXEntryActivity에서 수신된 intent와 IWXAPIEventHandler 인터페이스를 실현한 대상을 IWXAPI 인터페이스에 전달하는handleIntent 방법은 onCreate () 와onNew Intent () 에서 실현되어야 한다
    @Override
        protected void onCreate(@Nullable Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            api = WXAPIFactory.createWXAPI(this, WEIXIN_APP_ID,false);
    //        api.registerApp(WEIXIN_APP_ID);
            api.handleIntent(getIntent(),this);
        }
    
        @Override
        protected void onNewIntent(Intent intent) {
            super.onNewIntent(intent);
            setIntent(intent);
            api.handleIntent(intent,this);
        }
    

    위챗 4.2 이상 필요
    if (api.getWXAppSupportAPI() >= Build.TIMELINE_SUPPORTED_SDK_INT) {
        //do share
    }
    

    또한 위챗 자료의 출처를 설치할지 여부를 판단해야 한다
    /            
        public  boolean isWeChatAppInstalled(Context context) {
            if(api.isWXAppInstalled()) {
                return true;
            } else {
                final PackageManager packageManager = context.getPackageManager();//   packagemanager
                List<PackageInfo> pinfo = packageManager.getInstalledPackages(0);//              
                if (pinfo != null) {
                    for (int i = 0; i < pinfo.size(); i++) {
                        String pn = pinfo.get(i).packageName;
                        if (pn.equalsIgnoreCase("com.tencent.mm")) {
                            return true;
                        }
                    }
                }
                return false;
            }
        }
    
  • 권한으로 위챗 공유를 신청하려면 READPHONE_STATE 권한, 6.0 이후 시스템에 민감한 권한이므로 동적 신청이 필요합니다
  •  //                     
        private void checkPhoneState() {
            int permissionCheck = ContextCompat.checkSelfPermission(this, Manifest.permission.READ_PHONE_STATE);
            if (permissionCheck != PackageManager.PERMISSION_GRANTED) {
                ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_PHONE_STATE}, 0);
            }
        }
    
  • 이미지 리소스
  • 친구 및 모멘트 아이콘 다운로드 주소
    비고
    6.72 위챗 업데이트 후 리셋을 공유하면 cancel과 success 이벤트가 결과 리셋 방법인 onResp(Base Resp base Resp)로 되돌아오는 base Resp가 됩니다.errCode, BaseResp.가 표시되지 않습니다.ErrCode.ERR_USER_CANCEL, BaseResp. 만 반환ErrCode.ERR_OK(0) 위챗 업데이트 링크

    좋은 웹페이지 즐겨찾기