我正在尝试使用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
我想念什么?
答案 0 :(得分:0)
如果有人可以解释,那么删除行.AddApi(DriveClass.API,gso)
就可以解决问题。我知道这不是必需的,因为服务器将处理驱动器api,但是为什么它会“破坏”登录过程?