Design Introduction “Air” Styles Mobile Design Principles Styles UX Overview Design Patterns UI Components for Tizen App Design 2.3 TV Design Principles Styles UX Overview Patterns UI Components Wearable Development Tizen Studio Overview Download Tizen Studio Deprecation Notice Tizen Extensions for Visual Studio Family IoT extension SDK Docs Blog Blog Announcing the Tizen Studio 3.7 Release Announcing the Tizen Studio 3.1 Release Community Forums General Support Tizen .NET Web Application Development Native Application Development SDK & IDE Design Introduction “Air” Styles Mobile Design Principles Styles UX Overview Design Patterns UI Components for Tizen App Design 2.3 TV Design Principles Styles UX Overview Patterns UI Components Wearable Development Tizen Studio Overview Download Tizen Studio Deprecation Notice Tizen Extensions for Visual Studio Family IoT extension SDK Docs Blog Blog Announcing the Tizen Studio 3.7 Release Announcing the Tizen Studio 3.1 Release Community Forums General Support Tizen .NET Web Application Development Native Application Development SDK & IDE
How to store and restore cookies in a native web view?
Hi,
I am trying to develop a native web view app and it is working good.
But every time I close and restart the app all login/cookie information is lost.
How can I store and restore cookies in a native web view?
What is very weird: The HTML5 Web Storage (local db) gets restored, but the cookies aren’t available anymore!?
Do you have any information for me?
Here is the basic code that I am using (from a Samsung example):
#include "webviewexample.h" // Header files needed for EWK Webkit #include <Ecore.h> #include <Ecore_Evas.h> #include <Ecore_Getopt.h> #include <Eet.h> #include <Eina.h> #include <Elementary.h> #include <Evas.h> #include <EWebKit.h> #include <app.h> typedef struct appdata { Evas_Object *win; Evas_Object *conform; Evas_Object *label; Evas_Object *entry; Evas_Object *web_view; Evas_Object *back_button; Evas_Object *forward_button; } appdata_s; static void win_back_cb(void *data, Evas_Object *obj, void *event_info) { appdata_s *ad = data; /* Let window go to hide state. */ elm_win_iconified_set(ad->win, EINA_TRUE); } static void btn_go_cb(void *data, Evas_Object *obj, void *event_info) { appdata_s* ad = data; ewk_view_url_set(ad->web_view, elm_object_text_get(ad->entry) ); } static void btn_prev_cb(void *data, Evas_Object *obj, void *event_info) { appdata_s* ad = data; if( ewk_view_back_possible( ad->web_view ) == EINA_TRUE ) ewk_view_back( ad->web_view ); } static void btn_next_cb(void *data, Evas_Object *obj, void *event_info) { appdata_s* ad = data; if( ewk_view_forward_possible( ad->web_view ) == EINA_TRUE ) ewk_view_forward( ad->web_view ); } static void my_table_pack(Evas_Object *table, Evas_Object *child, int x, int y, int w, int h) { evas_object_size_hint_align_set(child, EVAS_HINT_FILL, EVAS_HINT_FILL); evas_object_size_hint_weight_set(child, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); elm_table_pack(table, child, x, y, w, h); evas_object_show(child); } static void create_base_gui(appdata_s *ad) { /* set up policy to exit when last window is closed */ elm_policy_set(ELM_POLICY_QUIT, ELM_POLICY_QUIT_LAST_WINDOW_CLOSED); /* Window */ ad->win = elm_win_util_standard_add(PACKAGE, PACKAGE); elm_win_autodel_set(ad->win, EINA_TRUE); int rots[4] = { 0, 90, 180, 270 }; elm_win_wm_rotation_available_rotations_set(ad->win, (const int *)(&rots), 4); eext_object_event_callback_add(ad->win, EEXT_CALLBACK_BACK, win_back_cb, ad); { /* Box to put the table in so we can bottom-align the table * window will stretch all resize object content to win size */ Evas_Object *box = elm_box_add(ad->win); evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); elm_win_resize_object_add(ad->win, box); evas_object_show(box); /* Table */ Evas_Object *table = elm_table_add(ad->win); /* Make table homogenous - every cell will be the same size */ elm_table_homogeneous_set(table, EINA_TRUE); /* Set padding of 10 pixels multiplied by scale factor of UI */ elm_table_padding_set(table, 5 * elm_config_scale_get(), 10 * elm_config_scale_get()); /* Let the table child allocation area expand within in the box */ evas_object_size_hint_weight_set(table, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); /* Set table to fiill width but align to bottom of box */ evas_object_size_hint_align_set(table, EVAS_HINT_FILL, EVAS_HINT_FILL); elm_box_pack_end(box, table); evas_object_show(table); { /* Entry */ ad->entry = elm_entry_add(ad->win); elm_entry_scrollable_set(ad->entry, EINA_TRUE); eext_entry_selection_back_event_allow_set(ad->entry, EINA_TRUE); elm_object_text_set(ad->entry, "http://www.tizen.org"); my_table_pack(table, ad->entry, 0, 0, 3, 1); /* Button-1 */ Evas_Object *btn = elm_button_add(ad->win); elm_object_text_set(btn, "Prev"); evas_object_smart_callback_add(btn, "clicked", btn_prev_cb, ad); my_table_pack(table, btn, 0, 1, 1, 1); /* Button-2 */ btn = elm_button_add(ad->win); elm_object_text_set(btn, "Go"); evas_object_smart_callback_add(btn, "clicked", btn_go_cb, ad); my_table_pack(table, btn, 1, 1, 1, 1); /* Button-3 */ btn = elm_button_add(ad->win); elm_object_text_set(btn, "Next"); evas_object_smart_callback_add(btn, "clicked", btn_next_cb, ad); my_table_pack(table, btn, 2, 1, 1, 1); /* WebView */ Evas *evas = evas_object_evas_get(ad->win); ad->web_view = ewk_view_add(evas); ewk_view_url_set(ad->web_view, elm_object_text_get(ad->entry) ); my_table_pack(table, ad->web_view, 0, 2, 3, 8); } } /* Show window after base gui is set up */ evas_object_show(ad->win); } static bool app_create(void *data) { /* Hook to take necessary actions before main event loop starts Initialize UI resources and application's data If this function returns true, the main loop of application starts If this function returns false, the application is terminated */ appdata_s *ad = data; create_base_gui(ad); return true; } static void app_control(app_control_h app_control, void *data) { /* Handle the launch request. */ } static void app_pause(void *data) { /* Take necessary actions when application becomes invisible. */ } static void app_resume(void *data) { /* Take necessary actions when application becomes visible. */ } static void app_terminate(void *data) { /* Release all resources. */ ewk_shutdown(); } static void ui_app_lang_changed(app_event_info_h event_info, void *user_data) { /*APP_EVENT_LANGUAGE_CHANGED*/ char *locale = NULL; system_settings_get_value_string(SYSTEM_SETTINGS_KEY_LOCALE_LANGUAGE, &locale); elm_language_set(locale); free(locale); return; } int main(int argc, char *argv[]) { appdata_s ad = {0,}; memset(&ad, 0x00, sizeof(appdata_s)); int ret = 0; ui_app_lifecycle_callback_s event_callback = {0,}; memset(&event_callback, 0x00, sizeof(ui_app_lifecycle_callback_s)); app_event_handler_h handlers[5] = {NULL, }; event_callback.create = app_create; event_callback.terminate = app_terminate; event_callback.pause = app_pause; event_callback.resume = app_resume; event_callback.app_control = app_control; ui_app_add_event_handler(&handlers[APP_EVENT_LANGUAGE_CHANGED], APP_EVENT_LANGUAGE_CHANGED, ui_app_lang_changed, &ad); ret = ui_app_main(argc, argv, &event_callback, &ad); if (ret != APP_ERROR_NONE) { dlog_print(DLOG_ERROR, LOG_TAG, "app_main() is failed. err = %d", ret); } return ret; }The manifest file:
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <manifest xmlns="http://tizen.org/ns/packages" api-version="2.4" package="org.example.webviewexample" version="1.0.0"> <profile name="mobile"/> <ui-application appid="org.example.webviewexample" exec="webviewexample" launch_mode="single" multiple="false" nodisplay="false" taskmanage="true" type="capp"> <label>webviewexample</label> <icon>webviewexample.png</icon> </ui-application> <privileges> <privilege>http://tizen.org/privilege/network.get</privilege> <privilege>http://tizen.org/privilege/appmanager.launch</privilege> <privilege>http://tizen.org/privilege/location</privilege> <privilege>http://tizen.org/privilege/internet</privilege> <privilege>http://tizen.org/privilege/notification</privilege> <privilege>http://tizen.org/privilege/display</privilege> <privilege>http://tizen.org/privilege/camera</privilege> <privilege>http://tizen.org/privilege/externalstorage</privilege> <privilege>http://tizen.org/privilege/content.write</privilege> </privileges> </manifest>BY
16 Apr 2025
Tizen Studio
BY
04 Nov 2024
Tizen Studio
BY
02 Apr 2024
Tizen Studio