Facebook Login for Android App with release key

后端 未结 5 2172
佛祖请我去吃肉
佛祖请我去吃肉 2020-12-24 04:31

I am trying to release my app on Google Play. I have a Facebook login in my app. Up until yesterday all was working fine till the time I was running the application with

相关标签:
5条回答
  • 2020-12-24 04:38

    Try this below code in on create method

     try
      {
    
            PackageInfo info = getPackageManager().getPackageInfo( "YOUR_PACKAGE_NAME", 
                    PackageManager.GET_SIGNATURES);
    
            for (Signature signature : info.signatures) {
                MessageDigest md = MessageDigest.getInstance("SHA");
    
                md.update(signature.toByteArray());
                Log.i("KeyHash:", Base64.encodeToString(md.digest(), Base64.DEFAULT));//will give developer key hash
                Toast.makeText(getApplicationContext(),Base64.encodeToString(md.digest(), Base64.DEFAULT), Toast.LENGTH_LONG).show(); //will give app key hash or release key hash
    
                }
        } catch (NameNotFoundException e) {
    
        } catch (NoSuchAlgorithmException e) {
    
        }
    
    0 讨论(0)
  • 2020-12-24 04:39

    For Linux

    Open Terminal :

    For Debug Build

    keytool -exportcert -alias androiddebugkey -keystore debug.keystore | openssl sha1 -binary | openssl base64
    

    you wil find debug.keystore from ".android" folder copy it from and paste on desktop and run above command

    For release Build

    keytool -exportcert -alias <aliasNameUseInReleseKeystore> -keystore <RelesekeystoreFilePath> | openssl sha1 -binary | openssl base64
    

    NOTE : Make sure In Both case it must ask for password. If it does not asks for password that means something is wrong in command.

    0 讨论(0)
  • 2020-12-24 04:41

    I have found a fantastic solution to manage debug and release environments.

    1.Generate two hashes, for debug using this command:

    keytool -exportcert -alias androiddebugkey -keystore c:\Users\YourUser\.android\debug.keystore | openssl sha1 -binary | openssl base64
    

    And this one for release:

    keytool -exportcert -alias "yourAliasUsedWhenYouGeneratedTheKey" -keystore "C:\Users\YourUser\AppData\Local\Android\android-studio\key.jks" | openssl sha1 -binary | openssl base64
    

    2.Go to Facebook Applications and create TWO applications, one "Your Application" and other "Your Application (debug)". Then assign the debug hash to the debug application and the release hash to the normal application (obvious).

    3.Get both Application Id and write them in the strings.xml file this way:

    <string name="app_id">123456789</string>
    <string name="app_id_debug">987654321</string>
    

    4.And finally, in your code, register the appId programatically in your Facebook Login fragment this way:

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        uiHelper = new UiLifecycleHelper(getActivity(), callback);
        uiHelper.onCreate(savedInstanceState);
    
        String appId;
    
        try {
            ApplicationInfo appinfo = getActivity().getPackageManager().getApplicationInfo(getActivity().getPackageName(), 0);
            boolean isDebugMode = (0 != (appinfo.flags &= ApplicationInfo.FLAG_DEBUGGABLE));
    
            if (isDebugMode)
                appId = getString(R.string.app_id_debug);
            else
                appId = getString(R.string.app_id);
        } catch (PackageManager.NameNotFoundException e) {
            appId = getString(R.string.app_id);
        }
    
        Session session = new Session.Builder(getActivity().getBaseContext()).setApplicationId(appId).build();
        Session.setActiveSession(session);
    
        return inflater.inflate(R.layout.fragment_facebook_login, container, false);
    }
    

    This way you will use the right appId and the right application on every environment without changing anything!!

    0 讨论(0)
  • 2020-12-24 04:50

    Here is what I did that solved the problem:

    Used openssl-0.9.8e_WIN64 Instead of openssl-0.9.8k_WIN64 from here

    keytool -exportcert -alias <RELEASE_KEY_ALIAS> -keystore <RELEASE_KEY_PATH> | PATH_TO_OPENSSL_LIBRARY\bin\openssl sha1 -binary | PATH_TO_OPENSSL_LIBRARY\bin\openssl base64
    

    example :

    keytool -exportcert -alias "yourAliasKey" -keystore "C:\Users\YourUser\AppData\Local\Android\android-studio\key.jks" | PATH_TO_OPENSSL_LIBRARY\bin\openssl sha1 -binary | PATH_TO_OPENSSL_LIBRARY\bin\openssl base64
    

    use your playstore keystore alias as RELEASE_KEY_ALIAS and its's saved path with file name as RELEASE_KEY_PATH.

    Note: use your playstore keystore password when if ask for type password.

    0 讨论(0)
  • 2020-12-24 04:52

    Here is what I did that solved the problem:

    1. Used openssl-0.9.8e_WIN32 Instead of openssl-0.9.8k_WIN32
    2. I was not using alias in the following or maybe I was entering a space in the alias because of which the key which was generated was wrong.

    I used this instead:

    keytool -exportcert -alias <aliasNameUseInReleaseKeystore> -keystore <ReleasekeystoreFilePath> | openssl sha1 -binary | openssl base64
    

    P.S. The method which I have posted in my question is really useless. It did nothing more than confuse me to no end.

    0 讨论(0)
提交回复
热议问题