首页 > 解决方案 > Android webview:抛出一些令牌错误。google.android.gms。一些东西加上 webcookies 没有正确缓存

问题描述

我有一个 webview 应用程序。我实际上将包名称重构为旧应用程序。那一个实际上是在使用 firebase 消息传递。我在我的版本中删除了对 firebase 的所有引用。但它仍然抛出一个错误。

    2019-07-15 23:34:49.191 13878-13878/? E/volley is: 0/
2019-07-16 02:24:51.997 30248-1014/? E/NetRec: [351] alcs.a: Could not retrieve server token for package com.google.android.apps.gcs
    java.util.concurrent.ExecutionException: rdg: 29503: 
        at avgq.b(:com.google.android.gms@17785040@17.7.85 (100700-253824076):3)
        at avgq.a(:com.google.android.gms@17785040@17.7.85 (100700-253824076):20)
        at alcs.a(:com.google.android.gms@17785040@17.7.85 (100700-253824076):1)
        at alcs.a(:com.google.android.gms@17785040@17.7.85 (100700-253824076):4)
        at alcr.getHeaders(:com.google.android.gms@17785040@17.7.85 (100700-253824076):2)
        at com.android.volley.toolbox.HttpClientStack.performRequest(:com.google.android.gms@17785040@17.7.85 (100700-253824076):9)
        at sdc.performRequest(:com.google.android.gms@17785040@17.7.85 (100700-253824076):1)
        at bwt.executeRequest(:com.google.android.gms@17785040@17.7.85 (100700-253824076):1)
        at com.android.volley.toolbox.BasicNetwork.performRequest(:com.google.android.gms@17785040@17.7.85 (100700-253824076):5)
        at sdf.performRequest(:com.google.android.gms@17785040@17.7.85 (100700-253824076):13)
        at com.android.volley.NetworkDispatcher.a(:com.google.android.gms@17785040@17.7.85 (100700-253824076):7)
        at com.android.volley.NetworkDispatcher.run(:com.google.android.gms@17785040@17.7.85 (100700-253824076):2)
     Caused by: rdg: 29503: 
        at rjf.a(:com.google.android.gms@17785040@17.7.85 (100700-253824076):4)
        at aodi.b(:com.google.android.gms@17785040@17.7.85 (100700-253824076):2)
        at aofv.a(:com.google.android.gms@17785040@17.7.85 (100700-253824076):6)
        at aaew.run(:com.google.android.gms@17785040@17.7.85 (100700-253824076):30)
        at bkng.run(:com.google.android.gms@17785040@17.7.85 (100700-253824076):2)
        at skq.b(:com.google.android.gms@17785040@17.7.85 (100700-253824076):37)
        at skq.run(:com.google.android.gms@17785040@17.7.85 (100700-253824076):21)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
        at sqo.run(Unknown Source:7)
        at java.lang.Thread.run(Thread.java:919)

应用级分级

apply plugin: 'com.android.application'

android {
    compileSdkVersion 28
    defaultConfig {
        applicationId "com.storeuncle.studyapp"
        minSdkVersion 22
        targetSdkVersion 28
        versionCode 3
        versionName "1.2"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }

}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'com.android.support:appcompat-v7:28.0.0'
    // implementation 'com.android.support:support-v4:28.0.0'
    implementation 'com.android.support.constraint:constraint-layout:1.1.3'
    //implementation 'com.google.firebase:firebase-messaging:17.3.4'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.2'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
    //implementation 'com.google.firebase:firebase-core:17.0.0'

   // compile "me.leolin:ShortcutBadger:1.1.19@aar"
}

//apply plugin: 'com.google.gms.google-services'

顶级等级

buildscript {  
    repositories {
        google()
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.4.2'
        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
      //  classpath 'com.google.gms:google-services:3.1.0'
    }
}
allprojects {
    repositories {
        google()
        jcenter()
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

最初的 pacakge 名称是 com.xyz.appname。起初我只更改了应用程序名称。它工作得很好。我将文件夹名称从 xyz 更改为其他名称。那就是这个错误弹出的时候。我只有一个包含所有代码的 java 文件。

任何文件中的任何行都没有错误。manifest 或 gradle 或任何其他文件。该应用程序一启动就崩溃了。有人可以帮我理解是什么原因造成的吗?这真的会让我很开心。谢谢你。

更新我的痛苦:-) 该应用程序停止崩溃。但是错误仍然存​​在。另请查看我为缓存浏览器 cookie 实现的代码。因为这也没有按预期工作。该网站在所有浏览器上都能正常工作。但在 webview 中,首次登录时加载的页面无法访问 cookie。它仅在第二次登录后获取 cookie。

public class MainActivity extends AppCompatActivity {

    WebView mWebView;
    private static final int INPUT_FILE_REQUEST_CODE = 1;
    private static final int FILECHOOSER_RESULTCODE = 1;
    private static final String TAG = MainActivity.class.getSimpleName();
    private ValueCallback<Uri> mUploadMessage;
    private Uri mCapturedImageURI = null;
    private ValueCallback<Uri[]> mFilePathCallback;
    private String mCameraPhotoPath;

    Toolbar toolbar;
    SharedPreferences sharedPref;
    SwipeRefreshLayout swipeContainer;
    CookieManager cookieManager;

    String URLS = "https://xyz.co.in/zyx/panel/index.php";
    int is_url = 0;

    @RequiresApi(api = Build.VERSION_CODES.ECLAIR_MR1)
    @SuppressLint("SetJavaScriptEnabled")
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        sharedPref = getApplicationContext().getSharedPreferences("MyPref", 0);

        mWebView = (WebView) findViewById(R.id.webView);
        toolbar = (Toolbar) findViewById(R.id.toolbar);
        swipeContainer = (SwipeRefreshLayout) findViewById(R.id.swipeContainer);

        mWebView.setWebViewClient(new NewWebViewClient());
        mWebView.setWebChromeClient(new ChromeClient());
        mWebView.clearCache(false);

        WebSettings webSettings = mWebView.getSettings();
        webSettings.setJavaScriptEnabled(true);
        webSettings.setDomStorageEnabled(true);
        webSettings.setAllowFileAccess(true);
        webSettings.setLightTouchEnabled(true);
        webSettings.setSupportZoom(true);
        webSettings.setBuiltInZoomControls(true);
        webSettings.setAppCacheEnabled(true);
        setSupportActionBar(toolbar);

        cookieManager = CookieManager.getInstance();
        cookieManager.setAcceptCookie(true);

        Intent intent = getIntent();
        is_url = intent.getIntExtra("is_url", 0);
        if (is_url == 1) {
            URLS = intent.getStringExtra("url");
        }
        if (isNetworkConnected()) {
            loadWebsite();
        }
        if (savedInstanceState == null) {
            mWebView.post(new Runnable() {
                @Override
                public void run() {
                    loadWebsite();
                }
            });
        }
    }

    private void loadWebsite() {
        ConnectivityManager cm = (ConnectivityManager) getApplication().getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo netInfo = cm.getActiveNetworkInfo();
        if (netInfo != null && netInfo.isConnectedOrConnecting()) {
            mWebView.loadUrl(URLS);
        } else {
            mWebView.setVisibility(View.GONE);
        }
    }

public class NewWebViewClient extends WebViewClient {
        String uid="";
        String pswd = "";
        String exp="";
        String usrnm = "";
        String cookies ="";
        @Override
        public void onPageStarted(WebView view, String url, Bitmap favicon) {
            super.onPageStarted(view, url, favicon);
            if(url.contains("login")){
               // view.clearCache(true);
                //view.clearHistory();
                //view.clearFormData();
                Log.i("Listener", "Start");
            }

        }

        @RequiresApi(api = Build.VERSION_CODES.GINGERBREAD)
        @Override
        public void onPageFinished(WebView view, String url) {
            super.onPageFinished(view, url);
            String cookies = cookieManager.getCookie(url);
            Log.d(TAG, "All the cookies in a string:" + cookies);
            try {

                if (cookies == null) {
                    return;
                }

                String[] splitCookies = cookies.split(";");
                for (String cookie : splitCookies) {
                    String[] cookieParts = cookie.split("=");
                    if (cookieParts.length > 0) {
                        String newCookie = cookieParts[0].trim() +
                                "=;expires=Sat, 1 Jan 2000 00:00:01 UTC;";
                        cookieManager.setCookie(url, newCookie);
                    }
                }


                uid = getCookie(url, "user_id");
                    pswd = getCookie(url, "login_string");
                    usrnm = getCookie(url, "username");
                    exp = getCookie(url, "exp");
                    if (uid != null && !uid.isEmpty()) {
                        SharedPreferences.Editor editor = sharedPref.edit();
                        editor.putString("user_id", uid);
                        editor.putString("login_string", pswd);
                        editor.putString("username", usrnm);
                        editor.putString("exp", exp);
                        //  Log.e("4444 ", ss.toString());
                        editor.commit();
                        Log.v(TAG, "cook page fin:" + cookies);
                    }


            }catch(Exception e){

            }
            if(url.contains("logout")){
                Toast.makeText(MainActivity.this, "Logout successful", Toast.LENGTH_SHORT).show();
                view.clearCache(true);
                view.clearHistory();
                view.clearFormData();

                //sharedPref.edit().clear().apply();
                Log.i("Listener", "Finish");
            }
        }
        @Override
        public void onLoadResource(WebView view, String url){
            Log.v(TAG, "onLoadResource url: " + url);
            String cookies = CookieManager.getInstance().getCookie(url);

        }
        public String getCookie(String siteName,String cookieName){
            String CookieValue = null;

            CookieManager cookieManager = CookieManager.getInstance();
            String cookies = cookieManager.getCookie(siteName);
            String[] temp=cookies.split(";");
            for (String ar1 : temp ){
                if(ar1.contains(cookieName)){
                    String[] temp1=ar1.split("=");
                    CookieValue = temp1[1];
                    break;
                }
            }
            return CookieValue;
        }
    }
}

我可以看到 cookie 的日志如下

D/MainActivity: All the cookies in a string:PHPSESSID=p6puofnc250frclqh541cog5i6; user_id=4d236af1; username=Sachin; exp=2020-07-11; login_string=koko%40sert
V/MainActivity: cook page fin:PHPSESSID=p6puofnc250frclqh541cog5i6; user_id=4d236af1; username=Sachin; exp=2020-07-11; login_string=koko%40sert

标签: androidandroid-studiowebviewandroid-webview

解决方案


当您更改包名称时,您需要将其告知 google。当您更改文件夹名称时,它会更改您的包名称。你在使用谷歌服务吗?如果是,则打开您的谷歌帐户并在其中更新您的应用程序包名称。之后,下载新的 google-services.json 并将其替换为 app 文件夹下项目文件中现有的 google-services.json。


推荐阅读