【问题标题】:Cannot get Release Keyhash for Facebook Connect Android SDK无法获取 Facebook Connect Android SDK 的 Release Keyhash
【发布时间】:2013-12-02 10:03:20
【问题描述】:

我正在尝试为我的应用检索 Release Keyhash。我正在为生成的密钥库文件提供正确的密码和路径,但仍然没有输出我的密钥哈希。

这是情况的截图。

如上图所示,我已正确提供所有信息,包括我的密码。我的密码是我在生成keystore file 时输入的密码。它不输出任何内容并移至下一行。

为什么不打印keyhash

【问题讨论】:

    标签: android facebook key


    【解决方案1】:
    package com.example.id;
    
    import java.security.MessageDigest;
    import java.security.NoSuchAlgorithmException;
    
    import android.os.Bundle;
    import android.app.Activity;
    import android.content.pm.PackageInfo;
    import android.content.pm.PackageManager;
    import android.content.pm.PackageManager.NameNotFoundException;
    import android.content.pm.Signature;
    import android.util.Base64;
    import android.util.Log;
    import android.view.Menu;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.Toast;
    
    public class MainActivity extends Activity {
        PackageInfo info;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            Button btn = (Button)findViewById(R.id.button1);
            final EditText et = (EditText)findViewById(R.id.editText1);
    
            btn.setOnClickListener(new OnClickListener() {
    
                @Override
                public void onClick(View v) {
                    // TODO Auto-generated method stub
    
                    try {
                        info = getPackageManager().getPackageInfo("com.example.id", PackageManager.GET_SIGNATURES);
                        for (Signature signature : info.signatures) {
                            MessageDigest md;
                            md = MessageDigest.getInstance("SHA");
                            md.update(signature.toByteArray());
                            String something = new String(Base64.encode(md.digest(), 0));
                            //String something = new String(Base64.encodeBytes(md.digest()));
                            et.setText(something);
                           Toast.makeText(getBaseContext(), "" + something, 2000).show();
                        }
                    } catch (NameNotFoundException e1) {
                        Log.e("name not found", e1.toString());
                    } catch (NoSuchAlgorithmException e) {
                        Log.e("no such an algorithm", e.toString());
                    } catch (Exception e) {
                        Log.e("exception", e.toString());
                    }
                }
            });
        }
    
    
    }
    

    【讨论】:

    • 这会是释放密钥吗?
    • 抱歉,我遇到了另一个问题,我会尽快回复您。
    • 好的...我尝试使用此代码,但它没有打印任何日志,note that我正在以发布模式运行应用程序。
    • 这里的“东西”将是你的输出伙伴...尝试在edittext或toast中设置...
    【解决方案2】:

    会话打开时试试这个

    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.d("KeyHash:", Base64.encodeToString(md.digest(), Base64.DEFAULT));
                    }
            } catch (NameNotFoundException e) {
    
            } catch (NoSuchAlgorithmException e) {
    
            }
    

    通过这种方式,您的代码将变得独立于机器。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多