【发布时间】:2022-01-04 10:32:41
【问题描述】:
【问题讨论】:
标签: android ios google-api api-key maui
【问题讨论】:
标签: android ios google-api api-key maui
原因: 我在我的 api 请求期间没有提供正确的信息
我们在 Google cloud 中添加了对包标识符和 Android Sha-1 签名的限制。
所以在Header request里面,我们需要发送这个信息
using Xamarin.Essentials;
//For iOS
Headers.Add("X-Ios-Bundle-Identifier", AppInfo.PackageName)
//For Android
Headers.Add("X-Android-Package", AppInfo.PackageName)
Headers.Add("X-Android-Cert", DependencyService.Get<ISignatureHashService>().GetSha1() })
为了获得 Sha-1 签名,我使用了您需要实现它的 DependencyService。
public string GetSha1()
{
var Context = Android.App.Application.Context;
if (Build.VERSION.SdkInt >= BuildVersionCodes.P)
{
PackageInfo packageInfo = Context.PackageManager.GetPackageInfo(Context.PackageName, PackageInfoFlags.SigningCertificates);
if (packageInfo == null || packageInfo.SigningInfo == null)
return string.Empty;
var signature = packageInfo.SigningInfo.GetSigningCertificateHistory().FirstOrDefault();
if (signature != null)
{
return SignatureDigest(signature);
}
}
else
{
PackageInfo packageInfo = Context.PackageManager.GetPackageInfo(Context.PackageName, PackageInfoFlags.Signatures);
if (packageInfo == null || packageInfo.Signatures == null)
return string.Empty;
var signature = Context.PackageManager.GetPackageInfo(Context.PackageName, PackageInfoFlags.Signatures).Signatures.FirstOrDefault();
if (signature != null)
return SignatureDigest(signature);
}
return string.Empty;
}
private static string SignatureHexa(Android.Content.PM.Signature signature)
{
using (SHA1Managed sha1 = new SHA1Managed())
{
var hash = sha1.ComputeHash(signature.ToByteArray());
var sb = new StringBuilder(hash.Length * 2);
foreach (byte b in hash)
{
sb.Append(b.ToString("X2"));
}
return sb.ToString();
}
}
对我来说,我的应用是通过 GooglePlay 签名的,所以我不需要多个签名
但如果您需要检查多个签名者
if (packageInfo.SigningInfo.HasMultipleSigners)
{
foreach (Signature signature in packageInfo.SigningInfo.GetApkContentsSigners())
{
//Dostuff
SignatureHexa(signature);
}
}
【讨论】: