退出时显示“ GoogleApiClient尚未连接”,但登录成功

时间:2018-12-08 11:21:08

标签: c# android xamarin.android google-signin

我正在尝试使用Android上的Google登录和服务器上的Google Drive创建一个项目。 所以首先我创建客户端:

public class AudioFragment extends Fragment {

    public static AudioFragment getInstance(String catId){
        AudioFragment myFragment = new AudioFragment();
        Bundle bundle=new Bundle();
        bundle.putString("name", catId); //key and value
        myFragment.setArguments(bundle);
        return myFragment;
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment

        String CAT_ID = getArguments().getString("name");
        Toast.makeText(getContext(),CAT_ID,Toast.LENGTH_SHORT).show();

        return inflater.inflate(R.layout.fragment_value, container, false);
    }
} 

我处理登录按钮单击:

getSupportFragmentManager().beginTransaction().replace(R.id.container, AudioFragment.getInstance("12")).addToBackStack(null).commit();

处理结果:

    protected override void OnCreate (Bundle savedInstanceState)
    {
        base.OnCreate (savedInstanceState);
        SetContentView (Resource.Layout.main);

        FindViewById(Resource.Id.btn_demarrer).SetOnClickListener(this);

        GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DefaultSignIn)
                .RequestEmail()
                .RequestServerAuthCode("my-client-id.apps.googleusercontent.com")
                .RequestScopes(new Scope("https://www.googleapis.com/auth/drive"))
                .Build();

        mGoogleApiClient = new GoogleApiClient.Builder(this)
                .EnableAutoManage(this , this)
                .AddApi(Auth.GOOGLE_SIGN_IN_API, gso)
                .AddApi(DriveClass.API,gso)
                .Build();
    }

在服务器端,一切正常,我收到一个有效的代码,可以使用Google驱动器。 但是实际上,即使登录过程似乎正常, public void OnClick(View v) { switch (v.Id) { case Resource.Id.btn_demarrer: var signInIntent = Auth.GoogleSignInApi.GetSignInIntent(mGoogleApiClient); StartActivityForResult(signInIntent, RC_SIGN_IN); break; } } 也从未设置为 public void HandleSignInResult(GoogleSignInResult result) { if (result.IsSuccess) { GoogleSignInAccount account = result.SignInAccount; string s=""; try { System.Net.WebClient Client = new System.Net.WebClient(); var url="http://myserver?code="+System.Net.WebUtility.UrlEncode(account.ServerAuthCode); byte[] r = Client.DownloadData(url); s = System.Text.Encoding.UTF8.GetString(r, 0, r.Length); } catch(System.Exception e) { System.Diagnostics.Debug.WriteLine(e.Message); while(e.InnerException!=null) { e=e.InnerException; System.Diagnostics.Debug.WriteLine(e.Message); } } if (!s.Equals("auth code received")) UpdateUI(false); } else { UpdateUI(false); } } mGoogleApiClient.isConnected是正确的,并且服务器验证码有效)。 如果我尝试注销,则会得到众所周知的Java异常true

我想念什么?

1 个答案:

答案 0 :(得分:0)

如果有人可以解释,那么删除行.AddApi(DriveClass.API,gso)就可以解决问题。我知道这不是必需的,因为服务器将处理驱动器api,但是为什么它会“破坏”登录过程?