Google Plus在Android中登录UserRecoverableAuthException

时间:2015-09-17 09:58:38

标签: android google-login

运行Google登录异步类时,标记值为null,表示fetchToken返回空值。范围url中fetchToken()中的问题。在显示异步类代码下, logcat中的错误& 清单权限: -

<SplitView x:Name="ShellSplitView"
           DisplayMode="Overlay"
           IsPaneOpen="False"
           OpenPaneLength="300">
    <SplitView.Pane>
        <Grid>
            <Grid.RowDefinitions>
                <RowDefinition Height="*" />
                <RowDefinition Height="Auto" />
            </Grid.RowDefinitions>
            <RadioButton x:Name="SettingsButton"
                         Grid.Row="1"
                         Content="Settings"
                         Checked="OnSettingsButtonChecked" />
        </Grid>
    </SplitView.Pane>
    <SplitView.Content>...</SplitView.Content>
</SplitView>

logcat出错: -

  public class GetUsernameTask extends AsyncTask {
            Activity mActivity;
            String mScope;
            String mEmail;


            GetUsernameTask(Activity activity, String name, String scope) {
                this.mActivity = activity;
                this.mScope = scope;
                this.mEmail = name;
            }

            @Override
            protected Object doInBackground(Object[] objects) {
                try {
                    String token = fetchToken();
                    if (token != null) {
                        // Insert the good stuff here.
                        // Use the token to access the user's Google data.
                        //...
                        Log.d(LoginActivity.class.getName(), "doInBackground token -> " + token);
                        googleToken = token;
                    //   showLoadingDialog(getString(R.string.login), getString(R.string.please_wait));
                        loginWithGoogle();

                    }else {
                        Log.d(LoginActivity.class.getName(), "doInBackground token null -> " );
                    }
                } catch (IOException e) {
                    System.out.println("------inCatch");
                    // The fetchToken() method handles Google-specific exceptions,
                    // so this indicates something went wrong at a higher level.
                    // TIP: Check for network connectivity before starting the AsyncTask.
                    //...
                }
                return null;
            }

            /**
             * Gets an authentication token from Google and handles any
             * GoogleAuthException that may occur.
             */
            protected String fetchToken() throws IOException {
                try {

                    Bundle bundle = new Bundle();
                    bundle.putString(GoogleAuthUtil.KEY_REQUEST_ACTIONS,
                            "http://schemas.google.com/AddActivity http://schemas.google.com/BuyActivity");

                    String scope="oauth2:server:client_id:629234825029-1cs4vursdfs06q2ir92anucn4r04c9jfc.apps.googleusercontent.com:api_scope:https://www.googleapis.com/auth/plus.login";

                    System.out.println("mActivity------"+mActivity);
                    System.out.println("mEmail----"+mEmail);

                        return GoogleAuthUtil.getToken(mActivity, mEmail, scope);






                } catch (UserRecoverableAuthException userRecoverableException) {
                    userRecoverableException.printStackTrace();
                    // GooglePlayServices.apk is either old, disabled, or not present
                    // so we need to show the user some UI in the activity to recover.
                    Log.d(LoginActivity.class.getName(), "error in fetch" );
                    //mActivity.handleException(userRecoverableException);


                }

                catch (GoogleAuthException fatalException) {
                    fatalException.printStackTrace();
                    // Some other type of unrecoverable exception has occurred.
                    // Report and log the error as appropriate for your app.
                    // ...
                    Log.d(LoginActivity.class.getName(), "error in fetch 2" );
                }
                catch (Exception e)
                {
                    System.out.println("----" + e);
                }
                return null;
            }
        }

清单:

 09-17 14:25:13.206    8994-9152/com.gns.socialtongits.pro.android W/System.err﹕ com.google.android.gms.auth.UserRecoverableAuthException: NeedPermission
    09-17 14:25:13.206    8994-9152/com.gns.socialtongits.pro.android W/System.err﹕ at com.google.android.gms.auth.GoogleAuthUtil.getToken(Unknown Source)
    09-17 14:25:13.206    8994-9152/com.gns.socialtongits.pro.android W/System.err﹕ at com.google.android.gms.auth.GoogleAuthUtil.getToken(Unknown Source)
09-17 14:25:13.206    8994-9152/com.gns.socialtongits.pro.android W/System.err﹕ at com.gns.socialtongits.android.LoginOptionsActivity$GetUsernameTask.fetchToken(LoginOptionsActivity.java:717)
09-17 14:25:13.206    8994-9152/com.gns.socialtongits.pro.android W/System.err﹕ at com.gns.socialtongits.android.LoginOptionsActivity$GetUsernameTask.doInBackground(LoginOptionsActivity.java:664)
09-17 14:25:13.206    8994-9152/com.gns.socialtongits.pro.android W/System.err﹕ at android.os.AsyncTask$2.call(AsyncTask.java:288)
09-17 14:25:13.206    8994-9152/com.gns.socialtongits.pro.android W/System.err﹕ at java.util.concurrent.FutureTask.run(FutureTask.java:237)
09-17 14:25:13.213    8994-9152/com.gns.socialtongits.pro.android W/System.err﹕ at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
09-17 14:25:13.213    8994-9152/com.gns.socialtongits.pro.android W/System.err﹕ at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
09-17 14:25:13.213    8994-9152/com.gns.socialtongits.pro.android W/System.err﹕ at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
09-17 14:25:13.213    8994-9152/com.gns.socialtongits.pro.android W/System.err﹕ at java.lang.Thread.run(Thread.java:841)
09-17 14:25:13.213    8994-9095/com.gns.socialtongits.pro.android I/Socket﹕ To Write: CN=3&CSID=1442480098448
09-17 14:25:13.213    8994-9152/com.gns.socialtongits.pro.android D/com.gns.socialtongits.android.LoginActivity﹕ error in fetch
09-17 14:25:13.213    8994-9152/com.gns.socialtongits.pro.android D/com.gns.socialtongits.android.LoginActivity﹕ doInBackground token null ->

提前致谢

1 个答案:

答案 0 :(得分:0)

您需要做的就是:

catch (UserRecoverableAuthException e) {
   startActivityForResult(e.getIntent(), REQUEST_AUTHORIZATION);
}

REQUEST_AUTHORIZATION可以是您想要的任何数字 - 它仅用于在onActivityResult中识别此请求...

点击此处查看此答案:UserRecoverableAuthException: NeedPermission

相关问题