Android Autofill仅处理来自onFillRequest的响应,而不处理来自身份验证活动的响应

Android Autofill仅处理来自onFillRequest的响应,而不处理来自身份验证活动的响应,android,xamarin,paypal,autofill,android-autofill-manager,Android,Xamarin,Paypal,Autofill,Android Autofill Manager,我已经为我的密码管理器应用程序实现了一个。用户报告了与的问题,其中服务似乎不起作用 我对此进行了调查,发现onFillRequest中的以下代码(Xamarin)确实有效:(“有效”表示在单击自动填充弹出窗口后填充字段) 它基本上使用单个数据集创建一个填充响应,该数据集为每个自动填充字段设置了值 现在我需要添加一个身份验证活动: var responseBuilder = new FillResponse.Builder(); var autofillIds = FindAutoFillIds(

我已经为我的密码管理器应用程序实现了一个。用户报告了与的问题,其中服务似乎不起作用

我对此进行了调查,发现
onFillRequest
中的以下代码(Xamarin)确实有效:(“有效”表示在单击自动填充弹出窗口后填充字段)

它基本上使用单个数据集创建一个填充响应,该数据集为每个自动填充字段设置了值

现在我需要添加一个身份验证活动:

var responseBuilder = new FillResponse.Builder();
var autofillIds = FindAutoFillIds(); //gets the autofill ids for each EditText

Intent intent = new Intent(this, typeof(MyAuthActivity));   
var sender = PendingIntent.GetActivity(this, 0, intent, PendingIntentFlags.CancelCurrent).IntentSender;
RemoteViews presentation = AutofillHelper.NewRemoteViews(PackageName, "fill data after auth", AppNames.LauncherIcon);

var datasetBuilder = new Dataset.Builder(presentation);
//Main difference here:
datasetBuilder.SetAuthentication(sender);

foreach (AutofillId autofillId in autofillIds)
{
    datasetBuilder.SetValue(autofillId, AutofillValue.ForText("some placeholder data"));
}

responseBuilder.AddDataset(datasetBuilder.Build());

callback.OnSuccess(responseBuilder.Build());
其中
MyAuthActivity.OnCreate
如下所示:

RemoteViews presentation = AutofillHelper.NewRemoteViews(PackageName, "dataset from auth activity", AppNames.LauncherIcon);

var datasetBuilder = new Dataset.Builder(presentation);
var autofillIds = GetAutofillIds(...); //returns the same autofillIds as in the onFillRequest

foreach (AutofillId autofillId in autofillIds)
{
    datasetBuilder.SetValue(autofillId, AutofillValue.ForText("some other data"));
}
var ReplyIntent = new Intent();

bool returnDataset = true; //tried both true and false, neither works
if (returnDataset)
{
    ReplyIntent.PutExtra(AutofillManager.ExtraAuthenticationResult, datasetBuilder.Build());
}
else
{
    var responseBuilder = new FillResponse.Builder();
    responseBuilder.AddDataset(datasetBuilder.Build());
    ReplyIntent.PutExtra(AutofillManager.ExtraAuthenticationResult, responseBuilder.Build());
}

SetResult(Result.Ok, ReplyIntent);
Finish();
这基本上是使用相同的自动填充ID创建另一个数据集,但使用FillResponse或dataset response返回它们都不起作用:目标应用程序上的输入字段保持为空

我注意到,在其autofill服务的实现中也出现了相同的行为

我的问题是:身份验证活动的代码是否有问题?或者这是否表明Paypal的应用程序存在问题?我能做些什么来进一步调试它吗?

这是一个已知的WebView,它固定在Chrome M64上


您可以通过安装较新的Chrome并通过设置->开发人员选项更改默认的WebView实现来验证它是否已修复。

使用Chrome beta版(64.0.3282.29),我仍然可以看到相同的情况。我还需要做什么吗?不,它应该能用。老实说,我自己还没有尝试过修复,所以我对铬问题添加了一条评论;我用Chrome Beta版(64.0.3282.85)和我的服务()试过,但还是失败了。然后我换成了金丝雀(65.0.3322.0),它成功了。
RemoteViews presentation = AutofillHelper.NewRemoteViews(PackageName, "dataset from auth activity", AppNames.LauncherIcon);

var datasetBuilder = new Dataset.Builder(presentation);
var autofillIds = GetAutofillIds(...); //returns the same autofillIds as in the onFillRequest

foreach (AutofillId autofillId in autofillIds)
{
    datasetBuilder.SetValue(autofillId, AutofillValue.ForText("some other data"));
}
var ReplyIntent = new Intent();

bool returnDataset = true; //tried both true and false, neither works
if (returnDataset)
{
    ReplyIntent.PutExtra(AutofillManager.ExtraAuthenticationResult, datasetBuilder.Build());
}
else
{
    var responseBuilder = new FillResponse.Builder();
    responseBuilder.AddDataset(datasetBuilder.Build());
    ReplyIntent.PutExtra(AutofillManager.ExtraAuthenticationResult, responseBuilder.Build());
}

SetResult(Result.Ok, ReplyIntent);
Finish();