如何同步饼干Android在web视图和铬视图、饼干、Android、web

2023-09-08 10:03:42 作者:沐音

我有搜索这一点,但没有发现计算器的答案,直到如今。 我的项目是创建的Andr​​oid的WebView应用展会网站的移动版本。 我知道有没有办法网站可以检测安装在设备上的应用程序在Chrome浏览器中运行的安全与否时。

于是我改变Android应用程序与addtional应用程序的名字..的用户代理则每次用户使用的应用程序,网站将检测网络正在运行的WebView然后在设备写cookesAPPNAME。

从那里,如果使用铬浏览的网站就会发现,cookie的用户,如果没有找到网页会显示一些链接帮助用户安装应用程序。

该问题是sysn我的应用程序和镀铬的外观之间饼干一样无法正常工作。

下面是我的activity.java 感谢您的帮助!

 公共类XaLuanActivity延伸活动{
    私有静态最后字符串变量= XaLuanActivity.class.getCanonicalName();
    私有静态最终诠释CHIASE_MENU = 1;
    私有静态最终诠释THOAT_MENU = 2;
    私有静态最终诠释TAILAI_MENU = 3;
    私有静态最终诠释TROGIUP_MENU = 4;
    私有静态最终诠释DANHGIA_MENU = 5;

    私人字符串mainUrl =htt​​p://www.xaluan.com/m.php;
    进度mProgressBar;
    的WebView wbvContent;
    @燮pressWarnings(德precation)
    @覆盖
    公共无效的onCreate(包savedInstanceState){
        super.onCreate(savedInstanceState);
        this.requestWindowFeature(Window.FEATURE_NO_TITLE);
        CookieSyncManager.createInstance(本);
        。CookieSyncManager.getInstance()startSync();
        。CookieManager.getInstance()setAcceptCookie(真正的);
        的setContentView(R.layout.xaluan);
        wbvContent =(web视图)findViewById(R.id.wbvContent);
        //wbvContent.setBackgroundColor(Color.parseColor("#FFFFFF));
        mProgressBar =(进度)findViewById(R.id.progressBar);
        wbvContent.getSettings()setJavaScriptEnabled(真)。
        wbvContent.setInitialScale(1);
        。wbvContent.getSettings()setLoadWithOverviewMode(真正的);
        。wbvContent.getSettings()setUseWideViewPort(真正的);
        。wbvContent.getSettings()setSupportZoom(真正的);
        。wbvContent.getSettings()setBuiltInZoomControls(真正的);

        wbvContent.setDownloadListener(新DownloadListener(){
            公共无效onDownloadStart(URL字符串,字符串的userAgent,
                    字符串contentDisposition,字符串MIMETYPE,
                    长CONTENTLENGTH){
              意图I =新的意图(Intent.ACTION_VIEW);
              i.setData(Uri.parse(URL));
              startActivity(ⅰ);
            }
        });
        wbvContent.getSettings()。setUserAgentString(
                wbvContent.getSettings()。getUserAgentString()
                +
                +的getString(R.string.user_agent_suffix)
        ); //检测用户代理,并添加XLAndroidApp后缀名结束

        HelloWebViewClient wbvClient =新HelloWebViewClient();
        wbvContent.setWebViewClient(wbvClient);

        如果(!isConnectedNetwork(本)){
            新AlertDialog.Builder(本)
            .setIcon(android.R.drawable.ic_dialog_alert)
            .setTitle(通报)
            .setMessage(清孔的合作KET NOI莽,VUI长KET NOI莽DJE苏粪)
            .setPositiveButton(THU赖,新DialogInterface.OnClickListener(){
                @覆盖
                公共无效的onClick(DialogInterface对话,诠释它){
                    XaLuanActivity.this.finish();
                    startActivity(新意图(XaLuanActivity.this,XaLuanActivity.class));
                }
            })
            .setNegativeButton(Thoát,新OnClickListener(){
                @覆盖
                公共无效的onClick(DialogInterface对话,诠释它){
                    XaLuanActivity.this.finish();
                }
            })
            。显示();
        }其他 {
             wbvContent.loadUrl(mainUrl);
             wbvContent.setWebChromeClient(新WebChromeClient(){
                 公共无效onProgressChanged(web视图来看,INT进度){
                    如果(进步与LT; 100安培;&安培; mProgressBar.getVisibility()== ProgressBar.GONE){
                       mProgressBar.setVisibility(ProgressBar.VISIBLE);
                    }
                    mProgressBar.setProgress(进度);
                    如果(进度== 100){
                       mProgressBar.setVisibility(ProgressBar.GONE);
                    }
                 }
             });
        }
        isFirstTime();
    }
    公共无效isFirstTime(){//检查一次
        尝试{
            共享preferences米preference = preferenceManager.getDefaultShared preferences(本);
             布尔firstTime = M preference.getBoolean(firstTime,真正的);
             如果(firstTime){
                ShortcutIconResource图标= Intent.ShortcutIconResource.fromContext(这一点,R.drawable.ic_launcher);
                意向意图=新的意图();
                意图launchIntent =新的意图(这一点,XaLuanActivity.class);

                intent.putExtra(Intent.EXTRA_SHORTCUT_INTENT,launchIntent);
                intent.putExtra(Intent.EXTRA_SHORTCUT_INTENT,launchIntent);
                intent.putExtra(android.intent.extra.shortcut.NAME,XA峦);
                intent.putExtra(android.intent.extra.shortcut.ICON_RESOURCE,图标); //也可以忽略太
                intent.setAction(com.android.launcher.action.INSTALL_SHORTCUT);
                sendBroadcast(意向);
                共享preferences.Editor编辑= M preference.edit();
                edit.putBoolean(firstTime,假);
                edit.commit();
             }
        }赶上(例外五){
            Log.e(标签+。isFirstTime,e.toString());
        }
    }


    私有静态类HelloWebViewClient扩展WebViewClient {

        @覆盖
        公共布尔shouldOverrideUrlLoading(web视图查看,字符串URL){

            如果(!网址=空&安培;及(url.startsWith(市场://)|| url.indexOf(play.google.com/store/apps/details)=  -  1)!){
                。view.getContext()startActivity(新意图(Intent.ACTION_VIEW,Uri.parse(URL)));
                //返回true;
            }
            否则如果(url.endsWith()|| url.indexOf(adsxaluan.apk.vn/download /)=APK。! -  1)
            {
                。view.getContext()startActivity(新意图(Intent.ACTION_VIEW).setData(Uri.parse(URL)));
            }
            其他 {
                view.loadUrl(URL);
                //返回false;
            }
            返回true;
        }

    }




    @覆盖
    公共布尔onCreateOptionsMenu(功能菜单){
        menu.add(0,CHIASE_MENU,0,正大SE)的setIcon(R.drawable.share)。
        menu.add(0,TAILAI_MENU,0,泰赖)的setIcon(R.drawable.refresh)。
        menu.add(0,DANHGIA_MENU,0,ĐánhGIA)的setIcon(R.drawable.rate)。
        menu.add(0,TROGIUP_MENU,0,TROGiúp)的setIcon(R.drawable.about)。
        menu.add(0,THOAT_MENU,0,Thoát)的setIcon(R.drawable.exit)。
        返回super.onCreateOptionsMenu(菜单);
    }
    @覆盖
    公共布尔onOptionsItemSelected(菜单项项){
        开关(item.getItemId()){
        案例CHIASE_MENU://嘉SE
            意图sharingIntent =新的意图(Intent.ACTION_SEND);
            sharingIntent.setType(text / plain的);
            sharingIntent.putExtra(Intent.EXTRA_SUBJECT,wbvContent.getTitle());
            sharingIntent.putExtra(android.content.Intent.EXTRA_TEXT,wbvContent.getUrl());
            startActivity(Intent.createChooser(sharingIntent,正大SE));
            打破;
        案例THOAT_MENU://嘉SE
            System.exit(0);
            打破;
        案例TAILAI_MENU://嘉SE
            wbvContent.reload();
            打破;
        案例TROGIUP_MENU://嘉SE
            意图int​​ent1 =新的意图(这一点,About.class);
            startActivity(intent1);
            打破;
        案例DANHGIA_MENU:
            字符串URL =。市场://细节ID =+ getApplicationContext()getPackageName();
            意图int​​ent2 =新的意图(Intent.ACTION_VIEW,Uri.parse(URL));
            startActivity(intent2);
            打破;
        默认:
            打破;
        }
        返回super.onOptionsItemSelected(项目);
    }
    @覆盖
    公共布尔的onkeydown(INT键code,KeyEvent的事件){
        如果(键code == KeyEvent.KEY code_BACK){
            如果(wbvContent.canGoBack()){
                wbvContent.goBack();
                返回false;
            }其他 {
                新AlertDialog.Builder(本)
                .setIcon(android.R.drawable.ic_dialog_alert)
                .setTitle(Thoát)
                .setMessage(潘基文共同介子thoát科伊UNG粪清孔)
                .setPositiveButton(CO,新DialogInterface.OnClickListener(){
                    @覆盖
                    公共无效的onClick(DialogInterface对话,诠释它){
                        XaLuanActivity.this.finish();
                    }
                })
                .setNegativeButton(清孔,NULL)
                。显示();
            }
        }
        返回super.onKeyDown(键code,事件);
    }
    公共静态布尔isConnectedNetwork(上下文的背景下){
        ConnectivityManager connectivityManager =(ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
        的NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
        返回activeNetworkInfo!= NULL;
    }
}
 

解决方案

抱歉,但你想要做什么是不可能的。饼干罐为您的应用程序和浏览器是完全独立的,无法进入到对方的安全和隐私的原因。

i have search for this but not found answer in stackoverflow untill now. My project is create android webview app show mobile version of website. i know there are no way website can detect the app installed on device or not while running in chrome browser for security.

这么多年word居然白用了 掌握word这五种视图,快速提高办公效率

So I change the useragent of the android app with addtional App's name .. then every time user use the app, website will detect web is running in webview then write cookes " Appname" in device.

from there if user using chrome to browse website will find that cookie, if not found web will show some link help user install the app.

The problems is sysn cookies between my app and chrome look like not work.

following is my activity.java Thanks for any help !

public class XaLuanActivity extends Activity{   
    private static final String tag=XaLuanActivity.class.getCanonicalName();
    private static final int CHIASE_MENU=1;
    private static final int THOAT_MENU=2;
    private static final int TAILAI_MENU=3;
    private static final int TROGIUP_MENU=4;
    private static final int DANHGIA_MENU=5;

    private String mainUrl="http://www.xaluan.com/m.php";
    ProgressBar mProgressBar;
    WebView wbvContent;
    @SuppressWarnings("deprecation")
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        this.requestWindowFeature(Window.FEATURE_NO_TITLE);
        CookieSyncManager.createInstance(this);
        CookieSyncManager.getInstance().startSync();
        CookieManager.getInstance().setAcceptCookie(true);
        setContentView(R.layout.xaluan);
        wbvContent=(WebView) findViewById(R.id.wbvContent);
        //wbvContent.setBackgroundColor(Color.parseColor("#FFFFFF"));
        mProgressBar=(ProgressBar)findViewById(R.id.progressBar);             
        wbvContent.getSettings().setJavaScriptEnabled(true);
        wbvContent.setInitialScale(1);
        wbvContent.getSettings().setLoadWithOverviewMode(true);
        wbvContent.getSettings().setUseWideViewPort(true);
        wbvContent.getSettings().setSupportZoom(true);
        wbvContent.getSettings().setBuiltInZoomControls(true);

        wbvContent.setDownloadListener(new DownloadListener() {
            public void onDownloadStart(String url, String userAgent,
                    String contentDisposition, String mimetype,
                    long contentLength) {
              Intent i = new Intent(Intent.ACTION_VIEW);
              i.setData(Uri.parse(url));
              startActivity(i);
            }
        });
        wbvContent.getSettings().setUserAgentString(
                wbvContent.getSettings().getUserAgentString() 
                + " "
                + getString(R.string.user_agent_suffix)
        );   // detect useragent and add XLAndroidApp suffix name to the end

        HelloWebViewClient wbvClient=new HelloWebViewClient();
        wbvContent.setWebViewClient(wbvClient);

        if(!isConnectedNetwork(this)) {
            new AlertDialog.Builder(this)
            .setIcon(android.R.drawable.ic_dialog_alert)
            .setTitle("Thông báo")
            .setMessage("Không có kết nối mạng, vui lòng kết nối mạng để sử dụng")
            .setPositiveButton("Thử lại", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    XaLuanActivity.this.finish();
                    startActivity(new Intent(XaLuanActivity.this, XaLuanActivity.class));
                }
            })
            .setNegativeButton("Thoát", new OnClickListener() {             
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    XaLuanActivity.this.finish();
                }
            })
            .show();
        }else {         
             wbvContent.loadUrl(mainUrl);
             wbvContent.setWebChromeClient(new WebChromeClient() {
                 public void onProgressChanged(WebView view, int progress)  {
                    if(progress < 100 && mProgressBar.getVisibility() == ProgressBar.GONE){
                       mProgressBar.setVisibility(ProgressBar.VISIBLE);
                    }
                    mProgressBar.setProgress(progress);
                    if(progress == 100) {
                       mProgressBar.setVisibility(ProgressBar.GONE);
                    }
                 }
             });
        }  
        isFirstTime();
    }
    public void isFirstTime() {// check if the first time
        try{
            SharedPreferences mPreference=PreferenceManager.getDefaultSharedPreferences(this);
             boolean firstTime=mPreference.getBoolean("firstTime", true);        
             if(firstTime) {                
                ShortcutIconResource icon = Intent.ShortcutIconResource.fromContext(this, R.drawable.ic_launcher);
                Intent intent = new Intent();
                Intent launchIntent = new Intent(this, XaLuanActivity.class);

                intent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, launchIntent);
                intent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, launchIntent);
                intent.putExtra("android.intent.extra.shortcut.NAME", "Xã Luận");
                intent.putExtra("android.intent.extra.shortcut.ICON_RESOURCE", icon); //can also be ignored too
                intent.setAction("com.android.launcher.action.INSTALL_SHORTCUT");
                sendBroadcast(intent);
                SharedPreferences.Editor edit=mPreference.edit();
                edit.putBoolean("firstTime", false);
                edit.commit();
             }     
        }catch (Exception e) {
            Log.e(tag+".isFirstTime", e.toString());
        }             
    }


    private static class HelloWebViewClient extends WebViewClient {

        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {

            if (url != null && (url.startsWith("market://")  || url.indexOf("play.google.com/store/apps/details")!=-1) ) {
                view.getContext().startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(url)));
                //return true;
            } 
            else if(url.endsWith(".apk") || url.indexOf("adsxaluan.apk.vn/download/")!=-1 ) 
            {
                view.getContext().startActivity( new Intent(Intent.ACTION_VIEW).setData(Uri.parse(url)) );
            }            
            else {
                view.loadUrl(url);
                //return false;
            }
            return true;
        }

    }




    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        menu.add(0, CHIASE_MENU, 0, "Chia Sẻ").setIcon(R.drawable.share);       
        menu.add(0, TAILAI_MENU, 0, "Tải Lại").setIcon(R.drawable.refresh);
        menu.add(0, DANHGIA_MENU, 0, "Đánh Giá").setIcon(R.drawable.rate);
        menu.add(0, TROGIUP_MENU, 0, "Trợ Giúp").setIcon(R.drawable.about);     
        menu.add(0, THOAT_MENU, 0, "Thoát").setIcon(R.drawable.exit);
        return super.onCreateOptionsMenu(menu);
    }
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
        case CHIASE_MENU: // chia se
            Intent sharingIntent = new Intent(Intent.ACTION_SEND);
            sharingIntent.setType("text/plain");
            sharingIntent.putExtra(Intent.EXTRA_SUBJECT, wbvContent.getTitle());
            sharingIntent.putExtra(android.content.Intent.EXTRA_TEXT, wbvContent.getUrl());                     
            startActivity(Intent.createChooser(sharingIntent,"Chia sẻ"));
            break;
        case THOAT_MENU: // chia se 
            System.exit(0);
            break;
        case TAILAI_MENU: // chia se    
            wbvContent.reload();
            break;
        case TROGIUP_MENU: // chia se
            Intent intent1=new Intent(this, About.class);
            startActivity(intent1);
            break;
        case DANHGIA_MENU:
            String url="market://details?id="+getApplicationContext().getPackageName();
            Intent intent2 = new Intent(Intent.ACTION_VIEW,Uri.parse(url));
            startActivity(intent2);
            break;
        default:
            break;
        }
        return super.onOptionsItemSelected(item);
    }   
    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if (keyCode == KeyEvent.KEYCODE_BACK) {
            if(wbvContent.canGoBack()) {
                wbvContent.goBack();
                return false;
            }else {
                new AlertDialog.Builder(this)
                .setIcon(android.R.drawable.ic_dialog_alert)
                .setTitle("Thoát")
                .setMessage("Bạn có muốn thoát khỏi ứng dụng không")
                .setPositiveButton("Có", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        XaLuanActivity.this.finish();
                    }
                })
                .setNegativeButton("Không", null)
                .show();
            }
        }
        return super.onKeyDown(keyCode, event);
    }
    public static boolean isConnectedNetwork(Context context) {
        ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
        return activeNetworkInfo != null;
    }
}

解决方案

Sorry, but what you want to do is not possible. The cookie jar for your app and Chrome are completely separate and inaccessible to each other for security and privacy reasons.