App은 위챗 애플릿 & 리셋을 불러일으키고 extMsg 값은 계속 {} 문제

6571 단어
  • 애플릿 리셋 앱의 extMsg 값은 {}-위챗 6.6.6 버전의 버그로 6.6.7 버전에서 수정되었습니다. 구체적으로 이 게시물을 보십시오.https://developers.weixin.qq.com/blogdetail?action=get_post_info&docid=000a2818d14998a043d6bf3ac52000&highline=Android

  • 수요원
    최근 위챗의 애플릿은 앱에서 환기를 지원하고 조작 후 앱으로 되돌아오는 기능을 지원한다.당사의 제품은 수요를 제기했습니다. 현재 클라이언트의 활동 운영 위치가 애플릿 페이지로 이동하는 것을 지원하고 애플릿 단추를 누르면 앱 지정 페이지로 이동하기를 바랍니다.제품은 이 기능이 한 이벤트에서 여러 페이지를 개발하는 문제를 피할 수 있고 위챗 애플릿의 활동도 클라이언트에서 보여줄 수 있다고 말한다.
    조사 연구하다
    위챗 문서:http://https//open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&id=21526646437Y6nEC&token=&lang=zh_CN
  • 환기 기능
  • String appId = "wxd930ea5d5xxxx8f4f"; //    AppId
    IWXAPI api = WXAPIFactory.createWXAPI(context, appId);
    
    WXLaunchMiniProgram.Req req = new WXLaunchMiniProgram.Req();
    req.userName = "gh_d43xxxxca31f"; //       id
    req.path = path;                  //             ,           
    req.miniprogramType = WXLaunchMiniProgram.Req.MINIPTOGRAM_TYPE_RELEASE;//         ,       
    api.sendReq(req);
    
  • 콜백
  • public void onResp(BaseResp resp) {
        if (resp.getType() == ConstantsAPI.COMMAND_LAUNCH_WX_MINIPROGRAM) {
            WXLaunchMiniProgram.Resp launchMiniProResp = (WXLaunchMiniProgram.Resp) resp;
            String extraData =launchMiniProResp.extMsg; //   JsApi navigateBackApplication  extraData    
        }
    }
    

    위챗 문서를 보면 사용이 간단하다. 환기할 때 애플릿과 앱을 연결하고 열린 경로를 지정하고 애플릿 버전을 지정하면 된다.리셋 시 애플릿에서 보낸'app-parameter'필드의 내용을 얻을 수 있습니다. app-parameter에 관해서는https://developers.weixin.qq.com/miniprogram/dev/api/launchApp.html애플릿이 필요한 학생이 썼어요.
    개발하다
    불러일으키다
    클라이언트의 원래 운영 위치(예를 들어 흔히 볼 수 있는 윤방 광고 위치)를 침입하지 않고 클릭하여 작은 프로그램의 페이지로 이동하기 위해 우리는 schema 방식으로 이동하고 투명한Activity를 수신자로 하여 파라미터를 받은 후 위챗의 인터페이스를 호출할 계획이다.(내용은 모두 schema의 매개 변수로 전달되며 path에 encode를 주의하십시오)
    
        
            
            
            
    
    

    내부 호출 위챗 인터페이스
    public class MiniprogramActivity extends BaseActivity{
    
        public static final int LAUNCH_MINIPROGRAM_SUPPORTED_SDK_667 = 0x25010500;
        
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            Intent intent = getIntent();
            if (intent != null && dispatchUri(intent)) {
                this.finish();
            }
        }
        
        public boolean dispatchUri(Intent intent) {
            String path, miniProgramId, miniprogramType;
            
            path = intent.getData().getQueryParameter("path");
            miniProgramId = intent.getData().getQueryParameter("userName");
            miniprogramType = intent.getData().getQueryParameter("miniprogramType");
    
            //path decode
            if (!TextUtils.isEmpty(path)) {
                try {
                    path = URLDecoder.decode(path, "utf-8");
                } catch (UnsupportedEncodingException e) {
                }
            }
            launchMiniProgram(this, miniProgramId, path, miniprogramType); 
            return true;
        }
        
        public void launchMiniProgram(Context context, String miniProgramId, String path,String miniprogramType){
            IWXAPI api = WXAPIFactory.createWXAPI(context, appId);
                
            if (!api.isWXAppInstalled()) {
                    Toast.makeText(context, context.getString("        "), Toast.LENGTH_SHORT).show();
                    return;
                }
    
                //Android  6.6.7     bug,           。           6.6.7
                if (!(api.getWXAppSupportAPI() >= LAUNCH_MINIPROGRAM_SUPPORTED_SDK_667)) {
                    Toast.makeText(context, context.getString("            ,            "), Toast.LENGTH_SHORT).show();
                    return;
                }
    
                int miniprogramTypeInt = WXMiniProgramObject.MINIPTOGRAM_TYPE_RELEASE;
                if (!TextUtils.isEmpty(miniProgramType)) {
                    if ("1".equals(miniProgramType)) {
                        miniprogramTypeInt = WXMiniProgramObject.MINIPROGRAM_TYPE_TEST;
                    } else if ("2".equals(miniProgramType)) {
                        miniprogramTypeInt = WXMiniProgramObject.MINIPROGRAM_TYPE_PREVIEW;
                    }
                }
    
                WXLaunchMiniProgram.Req miniProgramReq = new WXLaunchMiniProgram.Req();
                miniProgramReq.miniprogramType = miniprogramTypeInt;
                miniProgramReq.userName = miniProgramId;
                miniProgramReq.path = path;
    
                api.sendReq(miniProgramReq);
        }
           
    

    최종 schema 구조:schema://launchMiniProgram?userName=gh_d43f693ca31f&path=common%2fpages&miniprogramType=1
    여기서 매개변수
  • userName 애플릿의 원래 ID입니다.하나만 죽을 수 있는 게 확실하면
  • path 애플릿의 페이지를 엽니다.백엔드에 사용자 정의 파라미터를 추가할 수 있습니다. path는 encode가 필요합니다.
  • miniprogramType 이터레이션 버전.매개 변수의 목적은 디버깅을 편리하게 하는 것이다
  • 2, 콜백
    위챗 문서에서 설명한 바와 같이 작은 프로그램에서 앱으로 되돌아오는 것은 작은 프로그램의 버튼을 클릭해야만 되돌아갈 수 있다. 어떻게 버튼을 클릭하여 앱으로 되돌아가고 파라미터를 휴대할 수 있는지 다음과 같은 두 가지 절차가 필요하다.
  • 앱 측은 WXEntryActivty를 만들고 IWXAPIEventHandler 인터페이스를 실현하며onResp 방법을 다시 써야 한다.Acitvity는 Manifest 파일에서android:exported="true"를 성명해야 외부에 환기될 수 있습니다
  • public void onResp(BaseResp resp) {
        if (resp.getType() == ConstantsAPI.COMMAND_LAUNCH_WX_MINIPROGRAM) {
            WXLaunchMiniProgram.Resp launchMiniProResp = (WXLaunchMiniProgram.Resp) resp;
            String extraData =launchMiniProResp.extMsg; //          app-parameter   value
        }
    }
    
  • 애플릿 측은 구성 요소인 Open-type의 값을launchApp으로 설정해야 한다.앱을 열 때 앱에 매개 변수를 전달해야 할 경우 앱-parameter를 전달할 매개 변수로 설정할 수 있다.binderror를 통해 APP를 여는 오류 이벤트를 수신할 수 있습니다.예: 이렇게 앱이 받은 내용이 바로 wechat
  • 이다.
    총결산
    개발 중에 생긴 구덩이를 주로 말씀드릴게요.
  • 애플릿 리셋 앱의 extMsg 값은 {}-위챗 6.6.6 버전의 버그로 6.6.7 버전에서 수정되었습니다. 구체적으로 이 게시물을 보십시오.https://developers.weixin.qq.com/blogdetail?action=get_post_info&docid=000a2818d14998a043d6bf3ac52000&highline=Android
  • 애플릿의 위챗 버전을 가장 낮게 불러일으킨다.이 문제는 위챗 API에서 제공하는 가장 낮은 버전이 Build인 이전 문제에서 유래한 것이다.LAUNCH_MINIPROGRAM_SUPPORTED_SDK_INT=620757000.하지만 이 값은 6.6.7보다 낮을 것이다.안정성을 위해 애플릿 사용자를 불러일으키는 최저 버전은 6.6.7, 위챗 오픈SDK 버전은 0x25010500으로 제한했습니다.
  • 좋은 웹페이지 즐겨찾기