Android 위 챗 공유 기능 의 토로 와 사 고 를 기록 합 니 다.
/**
* :
* @param context
* @param url
* @param title
* @param description
* @param scene
*/
public static void shareToWeChatWithWebpage(Context context, String url,
String title, String description, int scene){
IWXAPI iwxapi = WXAPIFactory.createWXAPI(context, WXEntryActivity.WXAPI_APP_ID);
if (!iwxapi.isWXAppInstalled()){
ToastManager.getInstance(context.getApplicationContext()).showToast(" ");
return;
}
WXWebpageObject wxWebpageObject = new WXWebpageObject();
wxWebpageObject.webpageUrl = url;
WXMediaMessage wxMediaMessage = new WXMediaMessage(wxWebpageObject);
wxMediaMessage.mediaObject = wxWebpageObject;
wxMediaMessage.title = title;
wxMediaMessage.description = description;
wxMediaMessage.thumbData =
ImageManager.bmpToByteArray(BitmapFactory.decodeResource(context.getResources(), R.mipmap.ic_share_invite), true);
SendMessageToWX.Req req = new SendMessageToWX.Req();
req.transaction = String.valueOf(System.currentTimeMillis());
req.message = wxMediaMessage;
req.scene = scene;
iwxapi.sendReq(req);
}
다른 App 에서 N 번 을 사 용 했 지만 최근 프로젝트 에서 오류 가 발생 했 습 니 다.이 코드 를 실행 하고 나 면 반응 이 없고 위 챗 클 라 이언 트 를 조정 할 수 없 으 며 오류 정보 인쇄 알림 이 없습니다.어 쩔 수 없 이 공식 자 료 를 살 펴 보 았 습 니 다.[안 드 로 이 드 에서 흔히 볼 수 있 는 문제]라 는 힌트 를 찾 았 습 니 다. Q:wxapi.sendReq 인 터 페 이 스 를 호출 하여 true 로 돌아 갑 니 다.그러나 위 챗 클 라 이언 트 가 시작 되 지 않 았 습 니 다.다음 몇 가 지 를 확인 하 십시오.
A:
1)위 챗 설치 여부
2)호출 할 때 APK 패키지 이름과 서명 이 열 린 플랫폼 에서 작성 한 것 과 일치 하 는 지,서명 은 이 도 구 를 사용 하 십시오.다운 로드 를 누 르 면 debug 버 전이 설치 되 어 있 고 release 버 전이 설치 되 어 있 는 경우 가 자주 발생 합 니 다.패키지 이름 서명 을 확인 한 후 위 챗 을 마 운 트 해제 하거나 위 챗 데 이 터 를 지우 고 테스트 합 니 다.
3)보 낼 때 미리 보기 그림 의 크기 가 32k 를 초과 하 는 지 확인 합 니 다.
4)친구 목록 을 선택 할 때 까지 위 챗 을 조정 할 수 있 습 니 다.단,보 내 려 면 응답 이 없습니다.위 챗 SDK 코드 가 혼동 되 었 는 지 확인 하 십시오.SDK 에 대해 서 는 혼동 하지 말고 아래 의 proguard 설정 을 참고 하 십시오.
-keep class com.tencent.mm.sdk.** {
*;
}
검 사 를 통 해 코드 iwxapi.sendReq(req)를 발견 합 니 다.실행 후 false 로 돌 아 왔 습 니 다.사실은 위의 Q&A 의 쓰기 에 따라 이 문제 의 범주 에 속 하지 않 습 니 다.그러나 이 네 가지 점 에 따라 한 번 검 사 했 습 니 다.보 낸 미리 보기 그림 의 로 컬 미리 보기 크기 는 20KB 도 안 되 고 다른 설정 도 문제 가 없 지만 오류 가 발생 했 습 니 다.도대체 문제 가 어디 에 있 습 니까?
고민,생각 에 잠 겨 인생 을 의심 할 뻔 했 어!마지막 으로 해 보 는 태 도 를 무릅 쓰 고 미리 보기 그림 을 7KB 미 만 의 작은 그림 으로 바 꾸 고 코드 를 다시 실행 한 결과 놀 라 운 발견:iwxapi.sendreq(req);트 루 로 돌아 가 위 챗 클 라 이언 트 를 성공 적 으로 조정 하 였 습 니 다!그때 마음속 에 만 마리 의 풀 과 진흙 말 이 뛰 어 넘 었 구나!
흥분 한 후에 연 구 를 시 작 했 습 니 다.왜 예전 에 사용 한 미리 보기 그림 은 홈 페이지 문서 32K 의 제한 을 초과 하지 않 았 지만 위 챗 클 라 이언 트 를 조정 할 수 없 었 습 니까?홈 페이지 문서 가 잘못 썼 습 니까?상한 선 은 32KB 가 아 닙 니까?따라서 원본 코드 로 돌아 가 위 챗 SDK 가 제공 하 는 클래스 WXmedia Message 를 열 고 다음 과 같은 정 의 된 상수 들 을 찾 습 니 다.
public static final int THUMB_LENGTH_LIMIT = 32768;
private static final int TITLE_LENGTH_LIMIT = 512;
private static final int DESCRIPTION_LENGTH_LIMIT = 1024;
private static final int MEDIA_TAG_NAME_LENGTH_LIMIT = 64;
private static final int MESSAGE_ACTION_LENGTH_LIMIT = 2048;
private static final int MESSAGE_EXT_LENGTH_LIMIT = 2048;
아니 나 다 를 까 위 챗 SDK 는 위 챗 에 공유 되 는 미리 보기 그림 크기,제목 길이,설명 길이 등에 대한 정 보 를 제한 했다.이 가운데 미리 보기 그림 의 크기 는 32768 로 제한 되 어 있 으 며,소스 코드 에는 설명 이 명시 되 어 있 지 않다.궁금 한 것 은 1024 로 나 누 었 는데 마침 32 를 얻 었 습 니 다.이것 이 바로 홈 페이지 문서 에서 언급 한 상한 치 32KB 잖 아 요.그럼 홈 페이지 문 서 를 잘못 쓰 지 않 았 는데 문제 가 어디 에 있 는 거 죠?사실 그림 의 실제 하드디스크 점용 크기 와 메모리 점용 크기 에 관 한 문제 입 니 다.컴퓨터 하 드 디스크 에 저 장 된 이미지 파일 은 서로 다른 이미지 형식의 압축 규칙 에 따라 압축 되 어 하 드 디스크 의 점용 크기 를 줄인다.예 를 들 어 JPEG 와 같은 압축 된 이미지 형식 이다.안 드 로 이 드 시스템 에서 메모리 에 그림 을 읽 는 데 사용 되 는 메모리 크기 는 하 드 디스크 에 저 장 된 실제 크기 와 아무런 관계 가 없습니다.더 클 수도 있 고 더 작 을 수도 있 습 니 다.다음 코드 를 사용 하면 이미지 가 사용 하 는 메모리 크기 를 가 져 올 수 있 습 니 다.
private Bitmap decodeResource(Resources resources, int id) {
TypedValue value = new TypedValue();
resources.openRawResource(id, value);
BitmapFactory.Options opts = new BitmapFactory.Options();
opts.inTargetDensity = value.density;
Bitmap bitmap = BitmapFactory.decodeResource(resources, id, opts);
Log.i("Bitmap", "size is " + bitmap.getRowBytes() * bitmap.getHeight());
return bitmap;
}
그 중에서 bitmap.getRowBytes()*bitmap.getHeight()는 Bitmap 의 메모리 점용 크기 를 가 져 왔 고 단 위 는 Byte 이 며 1024 를 나 누 면 BK 단위 로 전환 할 수 있 습 니 다.메모:상기 자원 에서 Bitmap 대상 을 가 져 오 는 과정 에서 decodeResource(Resources res,int id)에 두 개의 인 자 를 포함 하 는 방법 을 직접 사용 하지 않 았 습 니 다.그림 이 서로 다른 drawable 이나 mipmap 폴 더 에 저장 되 어 있 기 때문에 메모리 사용량 이 일치 하지 않 는 문 제 를 피하 기 위해 서 입 니 다.안 드 로 이 드 화면 에 대해 잘 아 는 친구 들 은 이것 을 알 아야 합 니 다.여기 서 자세히 말 하지 않 겠 습 니 다.여러분 은 케 이 자 형의 글 인[안 드 로 이 드 의 그림 크기,메모리 점용 과 drawable 폴 더 관계 에 대한 연구 와 분석]을 참고 하 실 수 있 습 니 다.PS 도 구 를 통 해 미리 보기 그림 크기 를 수정 한 다음 위 코드 를 통 해 서로 다른 크기 의 그림 이 안 드 로 이 드 핸드폰 에서 사용 하 는 메모리 크기 를 테스트 하고 위 챗 클 라 이언 트 를 조정 할 수 있 는 지 확인 합 니 다.이러한 테스트 를 통 해 위 챗 SDK 와 공식 문서 의 32KB 미리 보기 그림 상한 선 크기 는 그림 이 아 닌 메모리 사용량 크기 를 말 합 니 다.이렇게 하면 앞에서 내 가 만난 문 제 를 해결 할 수 있다.
마지막 으로 안 드 로 이 드 위 챗 SDK 의 지적 도 알 리 페 이 SDK 를 포함 한 다른 제3자 서비스 공급 업 체 들 의 통용 문제 이 므 로 다른 뜻 없 이 화풀이 만 해 야 한다.
•서명 유일 성
안 드 로 이 드 개발 을 하 는 사람들 은 모두 알 고 있 습 니 다.개발 과정 에서 휴대 전화 나 시 뮬 레이 터 에서 컴 파일 되 고 실 행 된 apk 파일 은 IDE 가 제공 하 는 기본 적 인 유 니 버 설 서명 을 사용 합 니 다.본 격 적 으로 출시 된 apk 파일 은 개발 자가 사용자 정의 한 정식 서명 파일 을 사용 합 니 다.위 챗 SDK 는 애플 리 케 이 션 을 등록 할 때 하나의 서명 정보 만 입력 할 수 있어 정식 패키지 에서 위 챗 SDK 관련 기능 을 테스트 해 야 하 는데,정식 패 키 지 는 추적 디 버 깅 을 할 수 없어 불편 하 다.물론 개발 단계 에 있 을 때 위 챗 오픈 플랫폼 에서 테스트 패키지 의 서명 정 보 를 등록 하고 접속 할 때 정식 서명 파일 정보 로 수정 할 수 있 습 니 다.아니면 IDE 의 기본 서명 파일 을 수정 할 수도 있 습 니 다.그러나 이런 것들 은 모두 편리 하지 않다.만약 에 위 챗 오픈 플랫폼 이 다른 제3자 서비스 공급 업 체 처럼 하나의 응용 프로그램 에 대해 두 개 이상 의 서명 정 보 를 제공 하 는 등록 을 할 수 있다 면 빠 르 지 않 겠 는가.
•문서 가 분명 하지 않다
많은 대형 제3자 서비스 공급 업 체 들 이 기능 의 제공 에 만 관여 하고 문서 의 설명 에 관 계 없 이 심지어 Samples 코드 까지 엉망 으로 써 서 우리 개발 자 들 이 사용 하 는 과정 에서 완전한 참고 설명 도 하지 못 하고 문제 가 생 겨 도 손 을 쓸 수 없 으 며 불필요 한 시간 과 정력 을 헛되이 낭비 합 니 다.
글 이 약간 지루 하 다.주로 자신 이 이번에 위 챗 공 유 를 개발 할 때 문제 에 부 딪 히 고 문 제 를 분석 하 며 문 제 를 해결 하 는 과정 을 논술 하고 여러분 에 게 참고 가 되 기 를 바 랍 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Kotlin의 기초 - 2부지난 글에서는 Kotlin이 무엇인지, Kotlin의 특징, Kotlin에서 변수 및 데이터 유형을 선언하는 방법과 같은 Kotlin의 기본 개념에 대해 배웠습니다. 유형 변환은 데이터 변수의 한 유형을 다른 데이터...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.