Cordova 플러그 인 은 JavaScript 와 자바 의 통신 을 실현 하 는 상세 한 과정 입 니 다.
10753 단어 CordovaJavaScriptJava커 뮤 니 케 이 션
Cordova 플랫폼 은 오픈 소스 의 크로스 플랫폼 개발 프레임 워 크 로 모 바 일 애플 리 케 이 션 개발 분야 에 널리 활용 되 고 안 드 로 이 드,iOS 등 시스템 을 뛰 어 넘 는 애플 리 케 이 션 을 개발 할 수 있 습 니 다.Cordova 플랫폼 은 HTML/JavaScript 언어 를 바탕 으로 하 는데 어떻게 서로 다른 플랫폼 에서 해당 기능 을 실행 하고 실현 할 수 있 습 니까?여기 서 Cordova 가 제공 하 는 풍부 한 플러그 인 을 사 용 했 습 니 다.Cordova 의 대량의 플러그 인 은 자신의 프레임 워 크 와 결합 하여 응용 개발 자 에 게 플랫폼 을 뛰 어 넘 는 능력 을 제공 합 니 다.개발 자 는 운영 체제 차원 의 인터페이스 와 상호작용 을 하지 않 아 도 응용 기능 자체 에 관심 을 가 질 수 있 습 니 다.HMS 코 어 는 코르도바 개발 자가 HMS 코어 에 보다 편리 하고 빠르게 접속 할 수 있 는 능력 을 편리 하 게 하기 위해 능력 별 로 를 제공 했다Cordova 플러그 인
간단 한 소개
여기 에는 가장 많이 사용 되 는 화 웨 이 푸 시 서비스 인 코르도바 플러그 인 을 결합 해 HMS 코어 가 사용 하 는 JS-Java 메시지 인 터 랙 션 방식 을 소개 하고,JS 측 에서 Java 사 이 드 인 터 페 이 스 를 어떻게 호출 해 HMS 코어 능력 을 구현 하 는 지 설명 한다.물론 문제 포 지 셔 닝 을 할 때 도 본 고 를 참고 하여 분석 할 수 있다.
코르도바 기본 구조
앱 이 시 작 될 때 MainActivity 에서 loadUrl 함 수 를 호출 합 니 다.즉,Cordova WebView 의 초기 화 를 촉발 하여 Cordova 를 시작 합 니 다.이 때 Cordova WebView 는 PluginManager 대상,NativeToJsMessage Queue 대상,JavascriptInterface 의 ExposedJsApi 대상 을 만 듭 니 다.후속 메시지 인 터 랙 션 에 서 는 주로 ExposedJsApi 와 NativeToJsMessage Queue 를 통 해 진행 된다.
플러그 인의 로드 는 두 단계 로 나 뉜 다.우선 플러그 인 관리자 대상 을 만 들 때 설정 파일 의 모든 플러그 인 을 읽 고 맵 을 만 듭 니 다.이 플러그 인 을 처음 호출 할 때 실례 화하 고 관련 기능 을 수행 합 니 다.
메시지 반환 모드 는 동기 화 와 비동기 두 가지 모드 를 포함 하고 Cordova 에 서 는 함수 에 async 키 워드 를 설정 하여 구분 합 니 다.
동기 화 모드 에 대해 시스템 은 NativeToJSMessage Queue 대기 열 에서 데 이 터 를 가 져 오고 되 돌려 줍 니 다.그리고 콜 백 ID 에 따라 요청 을 찾 아 success 함수 에 되 돌려 줍 니 다.
비동기 모드 에 대해 서 는 실행 후 순환 함수 가 끊임없이 대기 열 에 있 는 데 이 터 를 가 져 옵 니 다.대응 하 는 요청 을 찾 았 을 때 success 함수 에 되 돌려 줍 니 다.
4화 웨 이 푸 시 서비스플러그 인 에서 동기 화 방식 을 사용 합 니 다.
푸 시 를 예 로 들 어 플러그 인 호출 방식 을 설명 합 니 다.
위 에서 알 아 보지 못 하면 상관 없고 아래 의 과정 만 알 면 된다.
1.플러그 인 설치
명령 을 실행 하 는 cordova plugin add@hmscore/cordova-plugin-hms-push 에 최신 플러그 인 을 설치 합 니 다.실행 후 plugins 에 플러그 인 정 보 를 추가 합 니 다.
그 중에서 plugin.xml 에 사용 되 는 모든 js 류,android 류 등 정 보 를 기 록 했 습 니 다.plugin 초기 화 시 시스템 에 불 러 옵 니 다.함수 나 인터페이스 가 설정 되 어 있 지 않 으 면 사용 할 수 없습니다.
2.메시지 맵
플러그 인 은 4 가지 메시지 맵 방식 을 제공 합 니 다:
(1)HmsMessaging 메시지 호출
HmsPush.js 에 서 는 runHmsMessaging 인 터 페 이 스 를 통 해 안 드 로 이 드 플랫폼 에 메 시 지 를 전달 하고,비동기 호출 방식 을 통 해 안 드 로 이 드 가 되 돌아 온 결 과 는 Promise 를 통 해 되 돌아 갑 니 다.
메 시 지 는 HmsPushMessaging 클래스 로 전 환 됩 니 다.HmsPushMessaging 의 execute 함수 에서 각 기능 에 따라 다른 함수 로 전 환 됩 니 다.
public void execute(String action, final JSONArray args, final CallbackContext callbackContext)
throws JSONException {
hmsLogger.startMethodExecutionTimer(action);
switch (action) {
case "isAutoInitEnabled":
isAutoInitEnabled(callbackContext);
break;
case "setAutoInitEnabled":
setAutoInitEnabled(args.getBoolean(1), callbackContext);
break;
case "turnOffPush":
turnOffPush(callbackContext);
break;
case "turnOnPush":
turnOnPush(callbackContext);
break;
case "subscribe":
subscribe(args.getString(1), callbackContext);
break;
각 함수 호출 에서 결 과 를 설정 하 는 방식 으로 결 과 를 JS 층 에 되 돌려 줍 니 다.내용 은 nativeToJSMessage Queue 대기 열 에 기 록 됩 니 다.
callBack.sendPluginResult(new PluginResult(PluginResult.Status.OK,autoInit));
(2)HmsInstanceId 메시지 호출HmsPush.js 에서 runHmsInstance 인 터 페 이 스 를 통 해 안 드 로 이 드 플랫폼 에 메 시 지 를 전달 하고 비동기 호출 방식 을 통 해 플랫폼 은 결 과 를 Promise 를 통 해 되 돌려 줍 니 다.
메 시 지 는 HmsPushInstanceId 클래스 로 전 환 됩 니 다.HmsPushInstanceId 의 execute 함수 에서 기능 에 따라 함수 처리 로 전 환 됩 니 다.
public void execute(String action, final JSONArray args, final CallbackContext callbackContext) throws JSONException {
if (!action.equals("init"))
hmsLogger.startMethodExecutionTimer(action);
switch (action) {
case "init":
Log.i("HMSPush", "HMSPush initialized ");
break;
case "enableLogger":
enableLogger(callbackContext);
break;
case "disableLogger":
disableLogger(callbackContext);
break;
case "getToken":
getToken(args.length() > 1 ? args.getString(1) : Core.HCM, callbackContext);
break;
case "getAAID":
getAAID(callbackContext);
break;
case "getCreationTime":
getCreationTime(callbackContext);
break;
마지막 으로 결 과 를 설정 하 는 방식 으로 결 과 를 JS 층 에 되 돌려 줍 니 다.내용 은 nativeToJSMessage Queue 대기 열 에 기 록 됩 니 다.
callBack.sendPluginResult(new PluginResult(PluginResult.Status.OK,autoInit));
과정 은 HmsPushMessaging 과 매우 비슷 하 다.HmsPushInstanceId 는 HmsInstanceId 와 관련 된 인 터 페 이 스 를 매 핑 하 는 데 사용 되 고,HmsPushMessaging 은 HmsMessaging 과 관련 된 인 터 페 이 스 를 매 핑 하 는 데 사용 된다 는 것 이 주요 차이 점 이다.(3) local Notification 메시지 호출
HmsLocalNotification.js 에서 run 인 터 페 이 스 를 통 해 안 드 로 이 드 플랫폼 에 메 시 지 를 전달 하고 비동기 호출 방식 을 통 해 플랫폼 은 결 과 를 Promise 를 통 해 되 돌려 줍 니 다.
메 시 지 는 HmsLocalNotification 클래스 로 전 환 됩 니 다.HmsLocalNotification 의 execute 함수 에서 각 기능 에 따라 서로 다른 함수 로 전 환 됩 니 다.
public void execute(String action, final JSONArray args, final CallbackContext callbackContext) throws JSONException {
switch (action) {
case "localNotification":
localNotification(args, callbackContext);
break;
case "localNotificationSchedule":
localNotificationSchedule(args.getJSONObject(1), callbackContext);
break;
case "cancelAllNotifications":
cancelAllNotifications(callbackContext);
break;
case "cancelNotifications":
cancelNotifications(callbackContext);
break;
case "cancelScheduledNotifications":
cancelScheduledNotifications(callbackContext);
break;
case "cancelNotificationsWithId":
cancelNotificationsWithId(args.getJSONArray(1), callbackContext);
break;
또한 sendpluginResult 인 터 페 이 스 를 통 해 처리 결 과 를 되 돌려 줍 니 다.그러나 local Notification 의 메 시 지 는 메시지 발송 과 관련 되 어 발송 이 완료 되면 메 시 지 를 되 돌려 줍 니 다.(4) Push 이벤트 리 셋
Push 메시지 에는 함수 호출 외 에 도 일반 메 시 지 를 받 거나 스 포 일 러 메 시 지 를 받 거나 Token 을 받 는 등 사건 감청 이 많 기 때문에 Push 에 서 는 각종 사건 에 대한 감청 도 있 습 니 다.
리 셋 프로 세 스에 대한 소 개 는 안 드 로 이 드 측 에서 시작 합 니 다.
Android 측 에서 Push 리 셋 메시지 의 함 수 는 HmsPushMessage Service.java 에 정 의 됩 니 다.
SDK 의 요구 에 따라 복사 에 필요 한 리 셋 함수:onMessage Received,onDeleted Messages,onNewToken 등.
이벤트 가 실 행 될 때 JS 층 에 이벤트 알림 을 보 냅 니 다.
public static void runJS(final CordovaPlugin plugin, final String jsCode) {
if (plugin == null)
return;
Log.d(TAG, "runJS()");
plugin.cordova.getActivity().runOnUiThread(() -> {
CordovaWebViewEngine engine = plugin.webView.getEngine();
if (engine == null) {
plugin.webView.loadUrl("javascript:" + jsCode);
} else {
engine.evaluateJavascript(jsCode, (result) -> {
});
}
});
}
JS 측 감청 정의:HmsPushEvent.js 에서 모든 사건 을 정의 하고 등록 하 였 습 니 다.
exports.REMOTE_DATA_MESSAGE_RECEIVED = "REMOTE_DATA_MESSAGE_RECEIVED";
exports.TOKEN_RECEIVED_EVENT = "TOKEN_RECEIVED_EVENT";
exports.ON_TOKEN_ERROR_EVENT = "ON_TOKEN_ERROR_EVENT";
exports.NOTIFICATION_OPENED_EVENT = "NOTIFICATION_OPENED_EVENT";
exports.LOCAL_NOTIFICATION_ACTION_EVENT = "LOCAL_NOTIFICATION_ACTION_EVENT";
exports.ON_PUSH_MESSAGE_SENT = "ON_PUSH_MESSAGE_SENT";
exports.ON_PUSH_MESSAGE_SENT_ERROR = "ON_PUSH_MESSAGE_SENT_ERROR";
exports.ON_PUSH_MESSAGE_SENT_DELIVERED = "ON_PUSH_MESSAGE_SENT_DELIVERED";
function onPushMessageSentDelivered(result) {
window.registerHMSEvent(exports.ON_PUSH_MESSAGE_SENT_DELIVERED, result);
}
exports.onPushMessageSentDelivered = onPushMessageSentDelivered;
주의해 야 할 것 은 이곳 의 정 의 는 응용 개발 시 주동 적 으로 호출 해 야 하 며 그렇지 않 으 면 효력 이 발생 하지 않 는 다 는 것 이다.데모 의 이벤트 Listeners.js 를 참고 할 수 있 습 니 다.자바 사 이 드 에서 리 셋 을 실 행 했 지만 받 지 못 한 것 을 발견 하면 코르도바 에서 관련 호출 이벤트 가 정의 되 어 있 는 지 확인 해 야 합 니 다.
이렇게 하면 안 드 로 이 드 측 에서 이 벤트 를 촉발 할 때 JS 측 에서 관련 메 시 지 를 받 고 처리 할 수 있 습 니 다.새로운 이벤트 가 필요 하 다 면 이 절 차 를 참고 할 수도 있다.
작은 매듭
이상 의 방식 을 통 해 Push 플러그 인 은 JS 측-자바 측의 메시지 교환 을 실현 하 였 습 니 다.대부분의 서비스 함수 인터페이스 호출 에서 사용 되 는 유사 한 형식.그러나 일부 서비스,예 를 들 어 광고,지도 등 사진 이나 동 영상 을 표시 해 야 하 는 장면(예 를 들 어 지도,네 이 티 브 광고 등)은 다른 방식 으로 사용 되 고 사용 에 있어 서도 더욱 복잡 하 다.이런 것들 은 다른 문서 에서 상세 하 게 소개 할 것 이다.
>>HMS 코어 홈 페이지 를 방문 하여 관련 내용 을 더 알 아 보기
>>HMS Core Cordova 플러그 인 개발 가이드 문서 가 져 오기
>>화 웨 이 HMS 코어 공식 포럼
>>화 웨 이 HMS 코어 코르도바 플러그 인 오픈 소스 창고 주소:GitHub
이상 은 Cordova 플러그 인 이 자바 스 크 립 트 와 자바 의 통신 을 어떻게 실현 하 는 지 에 대한 상세 한 내용 입 니 다.Cordova 플러그 인 자바 스 크 립 트 와 자바 의 통신 에 관 한 자 료 는 우리 의 다른 관련 글 에 관심 을 가 져 주 십시오!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
iOS-IPA-ReleaseiOS 기업 개발 계정 서버에 ipa 발표 게시 전에 필요한 문서: 1. https 서버, 반드시 https(본 문서는 https 인증서 관련 지식을 소개하지 않습니다) 2. 포장된 ipa 파일 3. html 페이지...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.