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();