Android 为什么Facebook身份验证SDK的行为会因其模式而大不相同?
我在应用商店里有一个Android应用程序。它在后端使用Firebase,并通过Facebook(和谷歌)提供社交登录 最近Facebook联系我,警告我通过Facebook登录时,我的应用程序正在崩溃/没有响应。困惑的我开始了一些测试 我发现,如果我在没有安装Facebook应用程序的情况下使用Facebook登录,一切都会完美运行。用户会看到一个浏览器窗口,可以登录,他们会被重定向回我的应用程序,我有他们的身份。当然,我在开发过程中发现了所有这些,但我只是想确认这些东西仍然有效 但当我安装Facebook应用程序(我在开发过程中忽略了这一点)时,我发现它不再有效。而是将用户重定向到此页面: 对于搜索和可访问性,此图像中的文本如下所示: 登录错误:将您登录到此应用程序时出错。请稍后再试 发生这种情况时,我检查了日志,发现以下内容可能与此相关,但我不确定:Android 为什么Facebook身份验证SDK的行为会因其模式而大不相同?,android,facebook,firebase,firebase-authentication,facebook-authentication,Android,Facebook,Firebase,Firebase Authentication,Facebook Authentication,我在应用商店里有一个Android应用程序。它在后端使用Firebase,并通过Facebook(和谷歌)提供社交登录 最近Facebook联系我,警告我通过Facebook登录时,我的应用程序正在崩溃/没有响应。困惑的我开始了一些测试 我发现,如果我在没有安装Facebook应用程序的情况下使用Facebook登录,一切都会完美运行。用户会看到一个浏览器窗口,可以登录,他们会被重定向回我的应用程序,我有他们的身份。当然,我在开发过程中发现了所有这些,但我只是想确认这些东西仍然有效 但当我安装F
07-05 15:36:28.468 908 5828 I ActivityManager: START u0 {act=NATIVE_WITH_FALLBACK cmp=<<redacted>>/com.facebook.FacebookActivity (has extras)} from uid 10264
07-05 15:36:28.469 665 665 D QCOM PowerHAL: LAUNCH HINT: ON
07-05 15:36:28.470 665 665 D QCOM PowerHAL: Activity launch hint handled
07-05 15:36:28.495 4837 4837 W ActivityThread: handleWindowVisibility: no activity for token android.os.BinderProxy@e64bd3e
07-05 15:36:28.689 665 665 D QCOM PowerHAL: LAUNCH HINT: OFF
07-05 15:36:28.946 29406 4941 W fb4a.BlueServiceQueue: Exception during service
07-05 15:36:28.946 29406 4941 W fb4a.BlueServiceQueue: X.2LH: [code] 404 [message]: Key hash GtvUdcOKFRAE0RY0LIw5veCA+M8= does not match any stored key hashes. (404) [extra]: null
07-05 15:36:28.946 29406 4941 W fb4a.BlueServiceQueue: at X.1eL.C(:93)
07-05 15:36:28.946 29406 4941 W fb4a.BlueServiceQueue: at X.2sO.C(:26)
07-05 15:36:28.946 29406 4941 W fb4a.BlueServiceQueue: at X.CvC.umA(:38)
07-05 15:36:28.946 29406 4941 W fb4a.BlueServiceQueue: at X.2yi.handleResponse(:224)
07-05 15:36:28.946 29406 4941 W fb4a.BlueServiceQueue: at X.1dO.run(:71)
07-05 15:36:28.946 29406 4941 W fb4a.BlueServiceQueue: at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:458)
07-05 15:36:28.946 29406 4941 W fb4a.BlueServiceQueue: at X.0r0.run(:2)
07-05 15:36:28.946 29406 4941 W fb4a.BlueServiceQueue: at X.1qG.run(:2)
07-05 15:36:28.946 29406 4941 W fb4a.BlueServiceQueue: at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
07-05 15:36:28.946 29406 4941 W fb4a.BlueServiceQueue: at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
07-05 15:36:28.946 29406 4941 W fb4a.BlueServiceQueue: at X.12V.run(:3)
07-05 15:36:28.946 29406 4941 W fb4a.BlueServiceQueue: at X.1xB.run(:12)
07-05 15:36:28.946 29406 4941 W fb4a.BlueServiceQueue: at java.lang.Thread.run(Thread.java:764)
07-05 15:36:28.981 908 8581 I ActivityManager: START u0 {cmp=com.facebook.katana/.ProxyAuth (has extras)} from uid 10264
07-05 15:36:28.982 665 665 D QCOM PowerHAL: LAUNCH HINT: ON
07-05 15:36:28.983 665 665 D QCOM PowerHAL: Activity launch hint handled
07-05 15:36:29.022 29406 29406 W ActivityThread: handleWindowVisibility: no activity for token android.os.BinderProxy@4f13a10
07-05 15:36:29.037 29406 29406 E Instrumentation: Uninitialized ActivityThread, likely app-created Instrumentation, disabling AppComponentFactory
07-05 15:36:29.037 29406 29406 E Instrumentation: java.lang.Throwable
07-05 15:36:29.037 29406 29406 E Instrumentation: at android.app.Instrumentation.getFactory(Instrumentation.java:1224)
07-05 15:36:29.037 29406 29406 E Instrumentation: at android.app.Instrumentation.newActivity(Instrumentation.java:1215)
07-05 15:36:29.037 29406 29406 E Instrumentation: at X.05O.newActivity(:3382)
07-05 15:36:29.037 29406 29406 E Instrumentation: at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2869)
07-05 15:36:29.037 29406 29406 E Instrumentation: at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3086)
07-05 15:36:29.037 29406 29406 E Instrumentation: at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
07-05 15:36:29.037 29406 29406 E Instrumentation: at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
07-05 15:36:29.037 29406 29406 E Instrumentation: at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
07-05 15:36:29.037 29406 29406 E Instrumentation: at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1816)
07-05 15:36:29.037 29406 29406 E Instrumentation: at android.os.Handler.dispatchMessage(Handler.java:106)
07-05 15:36:29.037 29406 29406 E Instrumentation: at android.os.Looper.loop(Looper.java:193)
07-05 15:36:29.037 29406 29406 E Instrumentation: at android.app.ActivityThread.main(ActivityThread.java:6718)
07-05 15:36:29.037 29406 29406 E Instrumentation: at java.lang.reflect.Method.invoke(Native Method)
07-05 15:36:29.037 29406 29406 E Instrumentation: at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
07-05 15:36:29.037 29406 29406 E Instrumentation: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
07-05 15:36:29.045 908 2933 I ActivityManager: START u0 {flg=0x2000000 cmp=com.facebook.katana/com.facebook.gdp.ProxyAuth (has extras)} from uid 10262
07-05 15:36:29.047 665 665 D QCOM PowerHAL: LAUNCH HINT: ON
07-05 15:36:29.068 29406 29406 W ActivityThread: handleWindowVisibility: no activity for token android.os.BinderProxy@f095b27
07-05 15:36:29.069 29406 29406 E Instrumentation: Uninitialized ActivityThread, likely app-created Instrumentation, disabling AppComponentFactory
07-05 15:36:29.069 29406 29406 E Instrumentation: java.lang.Throwable
07-05 15:36:29.069 29406 29406 E Instrumentation: at android.app.Instrumentation.getFactory(Instrumentation.java:1224)
07-05 15:36:29.069 29406 29406 E Instrumentation: at android.app.Instrumentation.newActivity(Instrumentation.java:1215)
07-05 15:36:29.069 29406 29406 E Instrumentation: at X.05O.newActivity(:3382)
07-05 15:36:29.069 29406 29406 E Instrumentation: at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2869)
07-05 15:36:29.069 29406 29406 E Instrumentation: at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3086)
07-05 15:36:29.069 29406 29406 E Instrumentation: at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
07-05 15:36:29.069 29406 29406 E Instrumentation: at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
07-05 15:36:29.069 29406 29406 E Instrumentation: at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
07-05 15:36:29.069 29406 29406 E Instrumentation: at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1816)
07-05 15:36:29.069 29406 29406 E Instrumentation: at android.os.Handler.dispatchMessage(Handler.java:106)
07-05 15:36:29.069 29406 29406 E Instrumentation: at android.os.Looper.loop(Looper.java:193)
07-05 15:36:29.069 29406 29406 E Instrumentation: at android.app.ActivityThread.main(ActivityThread.java:6718)
07-05 15:36:29.069 29406 29406 E Instrumentation: at java.lang.reflect.Method.invoke(Native Method)
07-05 15:36:29.069 29406 29406 E Instrumentation: at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
07-05 15:36:29.069 29406 29406 E Instrumentation: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
07-05 15:36:29.074 908 5828 I ActivityManager: START u0 {cmp=com.facebook.katana/com.facebook.gdp.LightWeightProxyAuthActivity (has extras)} from uid 10262
07-05 15:36:29.075 665 665 D QCOM PowerHAL: LAUNCH HINT: ON
07-05 15:36:29.121 29406 29406 W ActivityThread: handleWindowVisibility: no activity for token android.os.BinderProxy@d695c17
07-05 15:36:29.125 29406 29406 E Instrumentation: Uninitialized ActivityThread, likely app-created Instrumentation, disabling AppComponentFactory
07-05 15:36:29.125 29406 29406 E Instrumentation: java.lang.Throwable
07-05 15:36:29.125 29406 29406 E Instrumentation: at android.app.Instrumentation.getFactory(Instrumentation.java:1224)
07-05 15:36:29.125 29406 29406 E Instrumentation: at android.app.Instrumentation.newActivity(Instrumentation.java:1215)
07-05 15:36:29.125 29406 29406 E Instrumentation: at X.05O.newActivity(:3382)
07-05 15:36:29.125 29406 29406 E Instrumentation: at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2869)
07-05 15:36:29.125 29406 29406 E Instrumentation: at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3086)
07-05 15:36:29.125 29406 29406 E Instrumentation: at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
07-05 15:36:29.125 29406 29406 E Instrumentation: at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
07-05 15:36:29.125 29406 29406 E Instrumentation: at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
07-05 15:36:29.125 29406 29406 E Instrumentation: at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1816)
07-05 15:36:29.125 29406 29406 E Instrumentation: at android.os.Handler.dispatchMessage(Handler.java:106)
07-05 15:36:29.125 29406 29406 E Instrumentation: at android.os.Looper.loop(Looper.java:193)
07-05 15:36:29.125 29406 29406 E Instrumentation: at android.app.ActivityThread.main(ActivityThread.java:6718)
07-05 15:36:29.125 29406 29406 E Instrumentation: at java.lang.reflect.Method.invoke(Native Method)
07-05 15:36:29.125 29406 29406 E Instrumentation: at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
07-05 15:36:29.125 29406 29406 E Instrumentation: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
07-05 15:36:29.166 4837 4846 W System : A resource failed to call end.
07-05 15:36:29.250 665 665 D QCOM PowerHAL: LAUNCH HINT: OFF
07-05 15:36:29.266 908 952 I ActivityManager: Displayed com.facebook.katana/com.facebook.gdp.LightWeightProxyAuthActivity: +237ms
07-05 15:36:29.266 29463 29463 W BackgroundBroad: type=1400 audit(0.0:9257): avc: denied { read } for name="stats" dev="proc" ino=4026533031 scontext=u:r:untrusted_app:s0:c6,c257,c512,c768 tcontext=u:object_r:proc_qtaguid_stat:s0 tclass=file permissive=0
07-05 15:36:29.447 492 1273 D SurfaceFlinger: duplicate layer name: changing Surface(name=6e58560 com.facebook.katana/com.facebook.gdp.LightWeightProxyAuthActivity)/@0x13e5ed5 - animation-leash to Surface(name=6e58560 com.facebook.katana/com.facebook.gdp.LightWeightProxyAuthActivity)/@0x13e5ed5 - animation-leash#1
07-05 15:36:29.456 492 1273 D SurfaceFlinger: duplicate layer name: changing Surface(name=Dim Layer for - Task=2317)/@0x8471ddb - animation-leash to Surface(name=Dim Layer for - Task=2317)/@0x8471ddb - animation-leash#1
07-05 15:36:29.465 908 2933 I ActivityManager: START u0 {cmp=com.facebook.katana/.gdp.WebViewProxyAuth (has extras)} from uid 10262
07-05 15:36:29.467 665 665 D QCOM PowerHAL: LAUNCH HINT: ON
07-05 15:36:29.469 665 665 D QCOM PowerHAL: Activity launch hint handled
07-05 15:36:29.507 29406 29406 W ActivityThread: handleWindowVisibility: no activity for token android.os.BinderProxy@a7d9bb4
07-05 15:36:29.509 29406 29406 E Instrumentation: Uninitialized ActivityThread, likely app-created Instrumentation, disabling AppComponentFactory
07-05 15:36:29.509 29406 29406 E Instrumentation: java.lang.Throwable
07-05 15:36:29.509 29406 29406 E Instrumentation: at android.app.Instrumentation.getFactory(Instrumentation.java:1224)
07-05 15:36:29.509 29406 29406 E Instrumentation: at android.app.Instrumentation.newActivity(Instrumentation.java:1215)
07-05 15:36:29.509 29406 29406 E Instrumentation: at X.05O.newActivity(:3382)
07-05 15:36:29.509 29406 29406 E Instrumentation: at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2869)
07-05 15:36:29.509 29406 29406 E Instrumentation: at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3086)
07-05 15:36:29.509 29406 29406 E Instrumentation: at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
07-05 15:36:29.509 29406 29406 E Instrumentation: at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
07-05 15:36:29.509 29406 29406 E Instrumentation: at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
07-05 15:36:29.509 29406 29406 E Instrumentation: at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1816)
07-05 15:36:29.509 29406 29406 E Instrumentation: at android.os.Handler.dispatchMessage(Handler.java:106)
07-05 15:36:29.509 29406 29406 E Instrumentation: at android.os.Looper.loop(Looper.java:193)
07-05 15:36:29.509 29406 29406 E Instrumentation: at android.app.ActivityThread.main(ActivityThread.java:6718)
07-05 15:36:29.509 29406 29406 E Instrumentation: at java.lang.reflect.Method.invoke(Native Method)
07-05 15:36:29.509 29406 29406 E Instrumentation: at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
07-05 15:36:29.509 29406 29406 E Instrumentation: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
07-05 15:36:29.517 908 8581 I ActivityManager: START u0 {cmp=com.facebook.katana/.gdp.ProxyAuthDialog (has extras)} from uid 10262
07-05 15:36:29.519 665 665 D QCOM PowerHAL: LAUNCH HINT: ON
07-05 15:36:29.567 29406 29406 W ActivityThread: handleWindowVisibility: no activity for token android.os.BinderProxy@19959e4
07-05 15:36:29.569 29406 29406 E Instrumentation: Uninitialized ActivityThread, likely app-created Instrumentation, disabling AppComponentFactory
07-05 15:36:29.569 29406 29406 E Instrumentation: java.lang.Throwable
07-05 15:36:29.569 29406 29406 E Instrumentation: at android.app.Instrumentation.getFactory(Instrumentation.java:1224)
07-05 15:36:29.569 29406 29406 E Instrumentation: at android.app.Instrumentation.newActivity(Instrumentation.java:1215)
07-05 15:36:29.569 29406 29406 E Instrumentation: at X.05O.newActivity(:3382)
07-05 15:36:29.569 29406 29406 E Instrumentation: at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2869)
07-05 15:36:29.569 29406 29406 E Instrumentation: at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3086)
07-05 15:36:29.569 29406 29406 E Instrumentation: at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
07-05 15:36:29.569 29406 29406 E Instrumentation: at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
07-05 15:36:29.569 29406 29406 E Instrumentation: at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
07-05 15:36:29.569 29406 29406 E Instrumentation: at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1816)
07-05 15:36:29.569 29406 29406 E Instrumentation: at android.os.Handler.dispatchMessage(Handler.java:106)
07-05 15:36:29.569 29406 29406 E Instrumentation: at android.os.Looper.loop(Looper.java:193)
07-05 15:36:29.569 29406 29406 E Instrumentation: at android.app.ActivityThread.main(ActivityThread.java:6718)
07-05 15:36:29.569 29406 29406 E Instrumentation: at java.lang.reflect.Method.invoke(Native Method)
07-05 15:36:29.569 29406 29406 E Instrumentation: at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
07-05 15:36:29.569 29406 29406 E Instrumentation: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
07-05 15:36:29.651 492 540 D SurfaceFlinger: duplicate layer name: changing com.facebook.katana/com.facebook.katana.gdp.ProxyAuthDialog to com.facebook.katana/com.facebook.katana.gdp.ProxyAuthDialog#1
07-05 15:36:29.697 492 1763 D SurfaceFlinger: duplicate layer name: changing Dim Layer for - Task=2317 to Dim Layer for - Task=2317#1
07-05 15:36:29.720 665 665 D QCOM PowerHAL: LAUNCH HINT: OFF
07-05 15:36:29.731 492 540 W SurfaceFlinger: Attempting to set client state on removed layer: Dim Layer for - Task=2317#0
07-05 15:36:29.731 492 540 W SurfaceFlinger: Attempting to destroy on removed layer: Dim Layer for - Task=2317#0
谢谢你的帮助
更新:我将我的应用程序更新为webview\u ONLY
并重新提交。Facebook现在告诉我:
您的应用程序现在违反了平台策略8.2:实现Facebook登录的本机iOS和Android应用程序必须使用我们的官方SDK进行登录。
请确保您的应用程序正在使用最新版本的SDK进行登录
所以我现在被困在岩石和坚硬的地方。在你的日志顶部,写着
密钥哈希GtvUdcOKFRAE0RY0LIw5veCA+M8=与任何存储的密钥哈希不匹配。
在为发布版构建时,可能使用了错误的keyhash。显然,如中所述,当您使用错误的keyhash时,就会出现此问题
至于它为什么在WEB模式下工作,这是因为keyhash是由SDK检查的,并且由于您将它转到网页,所以您不会得到错误。您正在调试模式下运行,调试模式密钥哈希可能是正确的,这可能是它在您的设备上工作的原因的答案。以下是此问题的解释: 07-05 15:36:28.946 29406 4941 W fb4a.BlueServiceQueue:异常 服务期间07-05 15:36:28.946 29406 4941 W fb4a.BlueService队列: X.2LH:[代码]404[消息]:密钥哈希GTVudockfrae0ry0liw5veca+M8= 不匹配任何存储的密钥哈希。(404)[额外]:空 请记住,您在facebook应用程序中配置的密钥散列与应用程序签名的密钥库(证书)相关。 您必须使用密钥散列对应用程序进行签名,如果您不知道,建议您从密钥库中再次获取: 为什么Facebook登录SDK在不同的应用程序中表现得如此不同 这些模式?我认为这是一种无害的偏好 对身份验证本身没有任何影响,但天哪,我错了
在web中,您没有问题,但如果您在应用程序中,您需要授权使用该应用程序,并且对于android应用程序中的此实现非常重要,您需要使用Facebook SDK,在这种情况下,您需要获取应用程序签名时使用的密钥散列证书。您的日志显示密钥散列不匹配,因此您需要在facebook开发者帐户中添加密钥散列我正在共享一个代码和平的函数您只需调用此函数并打印显示密钥散列的日志,只需在您的fb开发者帐户中更新keyhash即可
public void generatekeyhash() {
try {
PackageInfo info = getPackageManager().getPackageInfo(
getPackageName(),
PackageManager.GET_SIGNATURES);
for (Signature signature : info.signatures) {
MessageDigest md = MessageDigest.getInstance("SHA");
md.update(signature.toByteArray());
Log.d("KeyHash:", Base64.encodeToString(md.digest(), Base64.DEFAULT));
}
} catch (PackageManager.NameNotFoundException e) {
} catch (NoSuchAlgorithmException e) {
}
}
这里的许多答案提供了部分解决方案,但我相信这是完整的解决方案和解释 您面临的问题与HashKey值与构建apk的设备不匹配有关。运行构建apk的计算机(mac、pc等)具有不同的散列键,该散列键会融合到最终的apk构建中,因此,如果从其他计算机进行构建,Facebook登录将无法工作 解决办法是做两件事 首先,在新计算机上创建apk构建时,需要生成HashKey字符串并获取它。执行此操作的代码如下所示:
public static String getMyHashKey(Context context, String packageName){
try {
PackageInfo info = context.getPackageManager().getPackageInfo(
packageName, PackageManager.GET_SIGNATURES);
for (Signature signature : info.signatures) {
MessageDigest md = MessageDigest.getInstance(SHA);
md.update(signature.toByteArray());
return Base64.encodeToString(md.digest(), Base64.DEFAULT);
}
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
return null;
}
其次,您需要在设置中将该字符串添加到您的facebook应用程序中。这可以通过以下两个步骤完成:
1) 转到并转到有问题的应用程序。然后单击设置-->基本。
2) 之后,向下滚动到Android区域并填写字段。请注意,您可以有多个哈希键
3) 保存更新,等待几分钟以进行更新,然后重试。这将解决您面临的问题 要解决您的问题,
登录开发者账户Facebook应用设置
现在,将应用程序hash
粘贴到key hash
字段中,然后保存配置。
运行你的应用程序,你会发现错误消失了
您可能会发现屏幕截图对应用程序设置很有帮助
public static String getMyHashKey(Context context, String packageName){
try {
PackageInfo info = context.getPackageManager().getPackageInfo(
packageName, PackageManager.GET_SIGNATURES);
for (Signature signature : info.signatures) {
MessageDigest md = MessageDigest.getInstance(SHA);
md.update(signature.toByteArray());
return Base64.encodeToString(md.digest(), Base64.DEFAULT);
}
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
return null;
}