Как добиться взаимодействия между нативными и гибридными приложениями в Worklight?
Я начну с объяснения варианта использования, который я пытаюсь реализовать. У меня есть два разных приложения:
- Родное андроид приложение и
- Гибридное приложение на основе Worklight
Вариант использования начинается с открытия родного приложения для Android. На определенном событии я открываю гибридное приложение с некоторыми параметрами.
В гибридном приложении я получаю переданные параметры на нативной стороне, и теперь я хочу использовать эти данные в веб-представлении приложения (JavaScript, HTML). Как я могу этого достичь?
Например:
Я открыл первое приложение для Android. Которые имеют одно текстовое поле и кнопку. Я ввел свой номер мобильного телефона в текстовое поле и нажал кнопку. При нажатии кнопки у меня есть код, который запускает другое гибридное приложение и передает ему номер мобильного телефона.
Я могу извлечь этот параметр мобильного номера на родной стороне кода. Как передать это в Web (JavaScript) часть этого?
Любая помощь будет оценена.
2 ответа
Я опишу решение с помощью фрагментов кода.
Сначала откройте гибридное приложение из нативного приложения.
Intent intent = getPackageManager().getLaunchIntentForPackage(“URI Of Target Application”);
intent.putExtra("someData", someData);
startActivity(intent);
Теперь запустится гибридное приложение на основе Worklight, и из нативной части мы извлечем эти переданные данные и сохраним их в общих настройках:
Bundle dataBundle = getIntent().getExtras();
String someData = dataBundle.getString("someData");
sharedpreferences = getSharedPreferences(MyPREFERENCES, MODE_PRIVATE);
sharedpreferences.edit().putString("someData", someData);
sharedpreferences.commit();
Теперь создайте плагин, который вы сможете вызвать после того, как веб-часть будет готова к использованию.
SharedPreferences sharedpreferences = cordova.getActivity().getSharedPreferences(MyPREFERENCES,cordova.getActivity().MODE_PRIVATE);
if(sharedpreferences!=null) {
String param = sharedpreferences.getString("someData", "-1");
sharedpreferences.edit().remove("someData").commit();
callbackContext.success(param);
}
Назовите этот плагин на веб-стороне гибридного приложения Worklight.
function onSuccessSharedData (param) {
Param is the passed parameter
}
Cordova.exec(onSuccessSharedData, onFailure, "pluginName", "action", []);
Если вы используете Worklight 6.2, вы можете достичь этого двумя способами.
Используйте API простого обмена данными
С этим API я не думаю, что вам даже нужно будет пытаться получить данные из нативного представления и перенести их обратно в веб-представление в вашем гибридном приложении, оно будет просто доступно в веб-представлении.Объяснение концепции и исполнения в этом ответе сделает его слишком длинным; Я предлагаю сначала просмотреть документацию и посмотреть, соответствует ли она вашим потребностям.
Но я предлагаю:
Используйте API отправителя действий
С помощью этого API вы можете легко перемещать данные из Интернета в нативную или нативную сеть.В вашем случае вы говорите, что у вас уже есть данные в нативном коде после открытия гибридного приложения, и вам нужно только переместить их в веб-просмотр, так что для этого необходимо:
- Добавить отправителя в нативный код
- Добавить получателя в коде JavaScript
К сожалению, в настоящее время нет обучающего модуля для демонстрации этой функции, но он будет.
Это основная предпосылка для того, что вам нужно сделать:
В JavaScript вы реализуете приемник:
function wlCommonInit(){ WL.App.addActionReceiver ("doSomething", actionReceiver); } function actionReceiver(received){ // Do something with the received data. alert (received.data.someProperty); }
В основном классе Java гибридного приложения (или в другом месте, в зависимости от вашего приложения) вы реализуете следующее в
onInitWebFrameworkComplete
послеelse
закрывающая скобка:public void onInitWebFrameworkComplete(WLInitWebFrameworkResult result){ ... ... else { handleWebFrameworkInitFailure(result); } JSONObject data = new JSONObject(); try { data.put("someProperty", 12345); } catch (JSONException e) { // handle it... } WL.getInstance().sendActionToJS("doSomething", data); }
Конечным результатом будет то, что как только вы откроете приложение, вас приветствует предупреждение "12345".