Android自动填充仅与onFillRequest的响应有关,但不与Authentication Activity有关

问题描述 投票:2回答:1

我为我的密码管理器应用程序实现了Android Autofill Service。用户报告了Paypal app的问题,该服务似乎不起作用。

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

var responseBuilder = new FillResponse.Builder();
var autofillIds = FindAutoFillIds(); //gets the autofill ids for each EditText
RemoteViews presentation = AutofillHelper.NewRemoteViews(PackageName, "fill data from onFillRequest", AppNames.LauncherIcon);
var datasetBuilder = new Dataset.Builder(presentation);

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

responseBuilder.AddDataset(datasetBuilder.Build());

callback.OnSuccess(responseBuilder.Build());

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

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

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也不返回数据集响应:目标应用程序上的输入字段保持为空。

我注意到Bitwarden实现其自动填充服务时出现了同样的行为。

我的问题是:身份验证活动的代码有什么问题吗?或者这是否显示Paypal应用程序的问题?我有什么办法可以进一步调试吗?

android xamarin paypal autofill android-autofill-manager
1个回答
0
投票

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

您可以通过安装较新的Chrome并通过“设置” - >“开发者选项”更改默认的WebView实施来验证其是否已修复。

© www.soinside.com 2019 - 2024. All rights reserved.