Как добиться взаимодействия между нативными и гибридными приложениями в Worklight?

Я начну с объяснения варианта использования, который я пытаюсь реализовать. У меня есть два разных приложения:

  1. Родное андроид приложение и
  2. Гибридное приложение на основе 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, вы можете достичь этого двумя способами.

  1. Используйте API простого обмена данными
    С этим API я не думаю, что вам даже нужно будет пытаться получить данные из нативного представления и перенести их обратно в веб-представление в вашем гибридном приложении, оно будет просто доступно в веб-представлении.

    Объяснение концепции и исполнения в этом ответе сделает его слишком длинным; Я предлагаю сначала просмотреть документацию и посмотреть, соответствует ли она вашим потребностям.

    Но я предлагаю:

  2. Используйте API отправителя действий
    С помощью этого API вы можете легко перемещать данные из Интернета в нативную или нативную сеть.

    В вашем случае вы говорите, что у вас уже есть данные в нативном коде после открытия гибридного приложения, и вам нужно только переместить их в веб-просмотр, так что для этого необходимо:

К сожалению, в настоящее время нет обучающего модуля для демонстрации этой функции, но он будет.

Это основная предпосылка для того, что вам нужно сделать:

  • В 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".

Другие вопросы по тегам