Facebook login in my android app is working fine in release apk, but not working properly after publishing the same apk on play store
Asked Answered
S

8

19

In my android application, I used facebook login. It is first time ever I used it.

The login functionality is working fine in release apk file. Also, I have generated key hash by using keytool, openssl:-

keytool -exportcert -alias "MyAppAlias" -keystore "Path to keystore" | 
openssl sha1 -binary | openssl base64

I added the generated key hash in App settings on my Facebook developer account. Now when I am generating Signed apk, Facebook login is working fine, but after publishing the same apk on Play Store, Facebook login is not working, it's simply redirecting to activity from where it was called(My App's login activity) without any crashes or not responding message.

Thanks.

Split answered 29/7, 2017 at 10:51 Comment(9)
did u made your app as public in developer accountTennies
Yes, I have made it public.Split
Can you confirm whether you chose to publish via Google Play App Signing or manual signing of application?Peduncle
try this @Split it may help you #14994933 make sure you have submitted your keyHash to facebook as wellTennies
@Peduncle I generated signed apk from android studio using the keystore I created. Then while Publishing on Play store, I found a link named APP SIGNING, so signed it there also.Split
@Split you can try this sir. This is your issue it will resolve your problem.Vickey
@AndyDeveloper I checked the link you mentioned. The issue is not regarding Google Maps API, I got the point that while signing in from Google Play, it generates new SHA-1 key, but my problem is with Facebook, where we don't use SHA-1 key, we use KeyHash as per my knowledge. But any comment over it is welcome.Split
@Split keyhash is generate from SHA. If you see the question it is regarding the google map api and facebook api too. You can see other developers answer there.Vickey
@AndyDeveloper For Facebook, there are only two answer 1) Generate keyhash from Java code - that is for debug mode - I already have done it. 2) Generate keyhash from keytool, openssl - I already have done this too. And added both key hashes to settings in Facebook developer account. Is there any way to generate KeyHash by SHA-1?Split
S
57

Finally, I resolved the issue.

Reason Behind this issue While publishing an App to play store, I did APP SIGNING from Google Play, hence new SHA-1 key was created there.

To see this key, go to Google Play Console, select your app, then Release Management -> App Signing

On this page, I got new SHA-1 key under section "App signing certificate "

enter image description here

So, the point is Google Play Signing creates a new certificate as shown in above image.

In Facebook developer account, we need to add Key hashes generated by our keystore. But in this case, we also need to add Key hash corresponds to this APP SIGNING certificate. Now the question is, how to get key hash for this certificate/SHA-1 fingerprint?

How to create Key Hash from SHA-1 key of Google Play APP SIGNING?

To generate key hash from SHA-1 key, execute a small Java program,

// GOOGLE PLAY APP SIGNING SHA-1 KEY:- 65:5D:66:A1:C9:31:85:AB:92:C6:A2:60:87:5B:1A:DA:45:6E:97:EA
            byte[] sha1 = {
                    0x65, 0x5D, 0x66, (byte)0xA1, (byte)0xC9, 0x31, 0x85, (byte)0xAB, (byte)0x92, (byte)0xC6, (byte)0xA2, 0x60, 0x87, 0x5B, 0x1A, (byte)0xDA, 0x45, 0x6E, (byte)0x97, (byte)0xEA
            };
            System.out.println("keyhashGooglePlaySignIn:"+ Base64.encodeToString(sha1, Base64.NO_WRAP));

Output:-

keyhashGooglePlaySignIn: ZV1dkSgxvc2p4aCtFx9tcaQr8N4=

Copy this key hash and paste it to Facebook Developer account settings for your app. This is how my problem got solved.

Thanks all developers for comments. :)

Split answered 30/7, 2017 at 13:59 Comment(11)
Hi, can you please post complete java code to convert the SHA-1 to key hash. I'm new to java facing little difficulty in executing above code.Viradis
It's very easy, just 2-3 lines of code. Observe the byte array I have written in my answer, just prepend 0x before each SHA1 key parts. After creating this byte array, you can print it by Base64 encoding. This line is also written in my code above.Split
Cannot find symbol Base64 error is coming. I have imported java.util.Base64Viradis
import android.util.Base64Split
thanks alot, It is working now. Mistake was I was trying it in eclipse it has to be tried in android studio.Viradis
if you are using java.util.Base64 use below method Base64.encodeBase64String(sha1)Genvieve
I found a online converter hash.online-convert.com/sha1-generatorThant
If you are using the online converter mentioned by @mehmet, then download the certificate from the console and upload it to generate the key hashDisorient
In Kotlin, it would be val sha1 = byteArrayOf(0x34.toByte(), 0xAD.toByte() ....)Successor
Thanks! a lot! about 1 weak to solve this problem, make sense because now google Release our App bundle with his own SHA-1Pronouncement
Alternatively another online key output from SHA1 tomeko.net/online_tools/hex_to_base64.phpDarlinedarling
T
9

I improved @vChamps answer a bit. just pass the SHA1 string to below function

public void hashFromSHA1(String sha1) {
    String[] arr = sha1.split(":");
    byte[] byteArr = new  byte[arr.length];

    for (int i = 0; i< arr.length; i++) {
        byteArr[i] = Integer.decode("0x" + arr[i]).byteValue();
    }

    Log.e("hash : ", Base64.encodeToString(byteArr, Base64.NO_WRAP));
}
Thar answered 9/2, 2018 at 15:29 Comment(2)
Thank you, this works for me rather then this HEX TO STRINGAposematic
Your answer should be accepted!! Really you help me a lot ThanksRanchod
C
9
echo SHA1_here | xxd -r -p | openssl base64

Does the same work as the above code.

Cavan answered 20/5, 2019 at 7:9 Comment(0)
S
5

Copy Paste the SHA1 key here to Reduce all the Headache.Link Internallly its converting Hex to Base 64.

Salina answered 11/2, 2020 at 5:18 Comment(0)
J
2

Kotlin code:

        import android.util.Base64
        import android.util.Log

        fun hashFromSHA1(sha1: String) {
            val arr = sha1.split(":".toRegex()).dropLastWhile { it.isEmpty() }.toTypedArray()
            val byteArr = ByteArray(arr.size)

            for (i in arr.indices) {
                byteArr[i] = Integer.decode("0x" + arr[i])!!.toByte()
            }

            Log.e("hash : ", Base64.encodeToString(byteArr, Base64.NO_WRAP))
        }
Joeljoela answered 4/11, 2019 at 6:48 Comment(0)
O
1

To get the hash based on the Google Play signIn, just convert the SHA-1 key from Play Console to base64 and them paste into Developer Facebook android config. You can use this online converter: http://tomeko.net/online_tools/hex_to_base64.php?lang=en

Onstad answered 4/3, 2021 at 12:39 Comment(0)
F
1

Make sure to enable Facebook in Sign-in providers Firebase.

  1. enter App ID & App secret

  2. copy OAuth Redirect URIs and paste facebook console Client OAuth settings ==>Valid OAuth Redirect URIs

  3. App live mode should be on

Fascine answered 28/9, 2022 at 16:54 Comment(0)
B
0

If you already have your SHA1 key you can use the online converter tool - to generate your hash code here

Beneficiary answered 14/9, 2022 at 7:9 Comment(1)
Your answer could be improved with additional supporting information. Please edit to add further details, such as citations or documentation, so that others can confirm that your answer is correct. You can find more information on how to write good answers in the help center.Panjandrum

© 2022 - 2024 — McMap. All rights reserved.