【问题标题】:how to sync cookies android in webview and chrome如何在 webview 和 chrome 中同步 cookie android
【发布时间】:2014-02-23 09:51:18
【问题描述】:

我已经搜索过这个,但直到现在还没有在 stackoverflow 中找到答案。 我的项目是创建 android webview 应用程序显示网站的移动版本。 我知道网站在 Chrome 浏览器中运行时无法检测到安装在设备上的应用程序以确保安全。

所以我用附加应用程序的名称更改了 android 应用程序的用户代理.. 然后每次用户使用该应用程序时,网站都会检测到 web 正在 webview 中运行,然后在设备中写入厨师“Appname”。

如果用户使用 chrome 浏览网站,则会从那里找到该 cookie,如果未找到该 cookie,则会显示一些链接帮助用户安装应用程序。

问题是我的应用和 chrome 之间的 sysn cookie 看起来不起作用。

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

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;
    }
}

【问题讨论】:

  • 我也对这个感兴趣。你找到解决方案了吗?

标签: android google-chrome android-webview


【解决方案1】:

抱歉,您想要做的事情是不可能的。出于安全和隐私原因,您的应用和 Chrome 的 cookie jar 是完全独立的,彼此无法访问。

【讨论】:

  • 那还有效吗?
猜你喜欢
  • 2014-01-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多