Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/234.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 正在获取结果代码结果。已取消google登录中活动的ActivityResult+;沙马林,安卓_Android_Xamarin_Oauth_Google Signin_Touchescancelled - Fatal编程技术网

Android 正在获取结果代码结果。已取消google登录中活动的ActivityResult+;沙马林,安卓

Android 正在获取结果代码结果。已取消google登录中活动的ActivityResult+;沙马林,安卓,android,xamarin,oauth,google-signin,touchescancelled,Android,Xamarin,Oauth,Google Signin,Touchescancelled,在我当前的项目中,我的一名团队成员在Xamarin.Android应用程序中实现了谷歌登录。他还添加了密钥库和sha以供发布。在调试模式下,它在他的机器上运行良好 但是当我尝试从我的机器上运行此代码时,我总是得到ResultCode结果。activity的activityresult已取消 这是我的android渲染器代码: public class GoogleLoginRendere : PageRenderer, GoogleApiClient.IOnConnectionFailedLi

在我当前的项目中,我的一名团队成员在Xamarin.Android应用程序中实现了谷歌登录。他还添加了密钥库和sha以供发布。在调试模式下,它在他的机器上运行良好

但是当我尝试从我的机器上运行此代码时,我总是得到ResultCode结果。activity的activityresult已取消

这是我的android渲染器代码:

public class GoogleLoginRendere : PageRenderer, 
GoogleApiClient.IOnConnectionFailedListener, Android.Views.View.IOnClickListener
{
    GoogleApiClient mGoogleApiClient;
    MainActivity activity;
    SignInButton signInButton;
    Android.Widget.Button btn;
    public GoogleLoginRendere()
    {

    }
    public void OnConnectionFailed(ConnectionResult result)
    {
        throw new NotImplementedException();
    }

    protected override void OnElementChanged(ElementChangedEventArgs<Page> e)
    {
    base.OnElementChanged(e);
    activity = Context as MainActivity;
    if (e.OldElement != null)
    {
        activity.ActivityResult -= HandleActivityResult;
    }
    if (e.NewElement != null)
    {
        activity.ActivityResult += HandleActivityResult;
    }
    btn = new Android.Widget.Button(activity);
    btn.Text = "Google SignIn";
    signInButton = new SignInButton(activity);
    signInButton.SetSize(SignInButton.SizeStandard);
    signInButton.Visibility = ViewStates.Visible;

    GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DefaultSignIn)
     .RequestEmail()
     .Build();

    mGoogleApiClient = new GoogleApiClient.Builder(activity)
     .EnableAutoManage(activity /* FragmentActivity */, this /* OnConnectionFailedListener */)
     .AddApi(Auth.GOOGLE_SIGN_IN_API, gso)
     .Build();

    FrameLayout.LayoutParams linLayoutParam = new FrameLayout.LayoutParams(LayoutParams.WrapContent, LayoutParams.WrapContent);
    linLayoutParam.Gravity = GravityFlags.Center;

    activity.AddContentView(btn, linLayoutParam);
    btn.SetOnClickListener(this);

    /* signInButton.Click += (sender, ex) =>
     {
      Console.WriteLine(string.Format("Click called"));
         Intent signInIntent = Auth.GoogleSignInApi.GetSignInIntent(mGoogleApiClient);
         activity.StartActivityForResult(signInIntent, 0);
     };*/

    MessagingCenter.Subscribe<object, string>(this, "CallLogout", (sender, msg) =>
    {
        Auth.GoogleSignInApi.SignOut(mGoogleApiClient);
        signInButton.Visibility = ViewStates.Visible;
    });
    }

    private void HandleActivityResult(object sender, ActivityResultEventArgs e)
    {
        Console.WriteLine(string.Format("renderer called"));
        if (e.RequestCode == 0)
        {
        GoogleSignInResult result = Auth.GoogleSignInApi.GetSignInResultFromIntent(e.Data);
        if (result.IsSuccess)
        {
            signInButton.Visibility = ViewStates.Invisible;
            User aUser = new User();
            aUser.Email = result.SignInAccount.Email;
            App.appUser = aUser;
            MessagingCenter.Send<object, string>(this, "callLoginWebservice", "callLoginWebservice");
        }
        else
        {
            Toast.MakeText(activity, "email not found", ToastLength.Long).Show();
            Auth.GoogleSignInApi.SignOut(mGoogleApiClient);
            signInButton.Visibility = ViewStates.Visible;
        }
        }
    }
    public void OnClick(Android.Views.View v)
    {
        var signInIntent = Auth.GoogleSignInApi.GetSignInIntent(mGoogleApiClient);
        activity.StartActivityForResult(signInIntent, 0);
        //Intent signInIntent = Auth.GoogleSignInApi.GetSignInIntent(mGoogleApiClient);
        //((MainActivity)Forms.Context).StartActivityForResult(signInIntent, 1);
        //mGoogleApiClient.Connect();
    }
}
公共类GoogleLoginRendere:PageRenderer,
GoogleAppClient.IOnConnectionFailedListener,Android.Views.View.IOnClickListener
{
GoogleapClient MGoogleapClient;
主要活动;
SignInButton SignInButton;
Android.Widget.Button btn;
公共谷歌登录资源()
{
}
连接失败的公共void(连接结果)
{
抛出新的NotImplementedException();
}
受保护的覆盖无效OnElementChanged(ElementChangedEventArgs e)
{
基础。一个要素发生变化(e);
活动=作为主要活动的上下文;
if(e.OldElement!=null)
{
activity.ActivityResult-=手动过滤活性Result;
}
if(例如NewElement!=null)
{
activity.ActivityResult+=手动过滤活性Result;
}
btn=新的Android.Widget.Button(活动);
btn.Text=“谷歌登录”;
signInButton=新的signInButton(活动);
signInButton.SetSize(signInButton.SizeStandard);
signInButton.Visibility=视图状态.Visible;
GoogleSignInOptions gso=新建GoogleSignInOptions.Builder(GoogleSignInOptions.DefaultSignIn)
.RequestEmail()
.Build();
mgoogleapclient=新的Googleapclient.Builder(活动)
.enableAutomanager(活动/*FragmentActivity*/,此/*OnConnectionFailedListener*/)
.AddApi(Auth.GOOGLE\u SIGN\u IN\u API,gso)
.Build();
FrameLayout.LayoutParams linLayoutParam=新建FrameLayout.LayoutParams(LayoutParams.WrapContent,LayoutParams.WrapContent);
linLayoutParam.Gravity=重力梯度中心;
activity.AddContentView(btn,linLayoutParam);
btn.SetOnClickListener(此);
/*登录按钮。单击+=(发件人,ex)=>
{
Console.WriteLine(string.Format(“单击调用”));
意向符号=Auth.googlesignianpi.getsignient(mgoogleapclient);
活动。StartActivityForResult(显著,0);
};*/
MessagingCenter.Subscribe(此“CallLogout”,(发件人,msg)=>
{
谷歌签名授权(mGoogleApiClient);
signInButton.Visibility=视图状态.Visible;
});
}
私有void HandleActivityResult(对象发送方,ActivityResultEventArgs e)
{
WriteLine(string.Format(“渲染器调用”);
if(e.RequestCode==0)
{
GoogleSignInResult结果=Auth.GoogleSignInApi.GetSignInResultFromIntent(e.Data);
如果(结果。发布成功)
{
signInButton.Visibility=ViewStates.Invisible;
用户aUser=新用户();
aUser.Email=result.SignInAccount.Email;
App.appUser=aUser;
发送(这是“callLoginWebservice”、“callLoginWebservice”);
}
其他的
{
Toast.MakeText(活动“未找到电子邮件”,ToastLength.Long).Show();
谷歌签名授权(mGoogleApiClient);
signInButton.Visibility=视图状态.Visible;
}
}
}
public void OnClick(Android.Views.View v)
{
var signinint=Auth.GoogleSignInApi.getsigninint(mgoogleapclient);
活动。StartActivityForResult(显著,0);
//意向符号=Auth.googlesignianpi.getsignient(mgoogleapclient);
//((主要活动)形式。上下文)。开始策略性纠正结果(重要性,1);
//mGoogleApiClient.Connect();
}
}
MainActivity.cs

public class ActivityResultEventArgs : EventArgs
{
    public int RequestCode { get; set; }
    public Result ResultCode { get; set; }
    public Intent Data { get; set; }
    public ActivityResultEventArgs() : base()
    { }
}

[Activity(Label = "AppName.Droid", Icon = "@drawable/icon", Theme = "@style/MyTheme", ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation)]
public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity 
{
    public event EventHandler<ActivityResultEventArgs> ActivityResult = delegate { };
    protected override void OnCreate(Bundle bundle)
    {
        TabLayoutResource = Resource.Layout.Tabbar;
        ToolbarResource = Resource.Layout.Toolbar;

        App.ServiceManager = new SoapServiceManager(new SoapService());

        base.OnCreate(bundle);

        global::Xamarin.Forms.Forms.Init(this, bundle);

        LoadApplication(new App());
    }

    protected override void OnActivityResult(int requestCode, Result resultCode, Intent data)
    {
        base.OnActivityResult(requestCode, resultCode, data);
        Console.WriteLine(string.Format("Main activity result called"));
        GoogleSignInResult result = Auth.GoogleSignInApi.GetSignInResultFromIntent(data);
        if (result != null)
        {
            if (result.IsSuccess)
            {
                Console.WriteLine(string.Format("Activity result is {0}", result.SignInAccount.Email));
            }
            else
            {
                Console.WriteLine(string.Format("Activity result is {0}", resultCode));
            }
        }
        ActivityResult(this, new ActivityResultEventArgs
        {
            RequestCode = requestCode,
            ResultCode = resultCode,
            Data = data
        });
    }
}  
公共类ActivityResultEventArgs:EventArgs
{
公共int请求代码{get;set;}
公共结果结果代码{get;set;}
公共意图数据{get;set;}
公共活动ResultEventArgs():base()
{ }
}
[活动(Label=“AppName.Droid”,Icon=“@drawable/Icon”,Theme=“@style/MyTheme”,ConfigurationChanges=ConfigChanges.ScreenSize | ConfigChanges.Orientation)]
公共类MainActivity:全局::Xamarin.Forms.Platform.Android.FormsAppCompatActivity
{
公共事件事件处理程序
但它是针对android studio中的JavaAndroid的,所以并不是所有提到的文件都在Xamarin.android解决方案中


如果有人有主意的话。帮帮我。

我的猜测是,你让谷歌管理你的应用程序签名密钥,这是Google Play中的一个选项。因此,你为发布配置文件生成的SHA1密钥是无用的,因为谷歌在生产中使用不同的密钥对你的应用程序进行签名

如果是这样的话,那么您应该转到Google Play Console->Release Management->App Signing,将您在那里找到的SHA1指纹添加到Firebase,并生成一个包含该密钥的新Google-services.json


我希望这会有帮助

您设法解决了吗?