iSm*_*ita 2 android facebook facebook-graph-api
我想在Google Play上发布我的应用.我的应用程序中有Facebook登录.直到昨天一切正常,直到我运行应用程序时debug.keystore.但是,当我使用自己的发布密钥并签署我的应用程序Facebook没有登录时,我似乎无法弄清楚原因.
按照这个链接,并做了所有这些方法:所以:key-hash-for-android-facebook-app
我改变了机器,我改变了平台(windows和mac osx ML)以获得解决方案,但同样的问题.它没有登录.当我使用debug.keystore时,下面的代码给了我正确的哈希键,当我使用不同的密钥签署应用程序时,我得到相同的Hashkey(我在得到很多试验之后得出结论,我得到的密钥是错的)
PackageInfo info;
try {
info = getPackageManager().getPackageInfo("com.you.name", 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()));
Log.e("hash key", something);
}
} 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());
}
Run Code Online (Sandbox Code Playgroud)
因此,在使用发布密钥对应用程序进行签名时,我们需要采取哪些额外步骤.请帮忙.
iSm*_*ita 10
以下是我所做的解决问题的方法:
我改用了这个:
keytool -exportcert -alias <aliasNameUseInReleaseKeystore> -keystore <ReleasekeystoreFilePath> | openssl sha1 -binary | openssl base64
Run Code Online (Sandbox Code Playgroud)
PS我在我的问题中发布的方法真的没用.它只会让我迷惑不解.
我找到了一个管理调试和发布环境的出色解决方案.
1.使用以下命令生成两个哈希值进行调试:
keytool -exportcert -alias androiddebugkey -keystore c:\Users\YourUser\.android\debug.keystore | openssl sha1 -binary | openssl base64
Run Code Online (Sandbox Code Playgroud)
这一个发布:
keytool -exportcert -alias "yourAliasUsedWhenYouGeneratedTheKey" -keystore "C:\Users\YourUser\AppData\Local\Android\android-studio\key.jks" | openssl sha1 -binary | openssl base64
Run Code Online (Sandbox Code Playgroud)
2.转到Facebook应用程序并创建两个应用程序,一个"您的应用程序"和其他"您的应用程序(调试)".然后将调试哈希分配给调试应用程序,并将释放哈希分配给普通应用程序(显而易见).
3.获取Application Id并以这种方式将它们写入strings.xml文件:
<string name="app_id">123456789</string>
<string name="app_id_debug">987654321</string>
Run Code Online (Sandbox Code Playgroud)
4.最后,在您的代码中,以这种方式以编程方式在您的Facebook登录片段中注册appId:
@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);
}
Run Code Online (Sandbox Code Playgroud)
这样你就可以在每个环境中使用正确的appId和正确的应用程序,而无需改变任何东西!
对于Linux
开放式终端:
对于Debug Build
keytool -exportcert -alias androiddebugkey -keystore debug.keystore | openssl sha1 -binary | openssl base64
Run Code Online (Sandbox Code Playgroud)
您将从".android"文件夹中找到debug.keystore,将其从桌面复制并粘贴到桌面上并运行上面的命令
发布版本
keytool -exportcert -alias <aliasNameUseInReleseKeystore> -keystore <RelesekeystoreFilePath> | openssl sha1 -binary | openssl base64
Run Code Online (Sandbox Code Playgroud)
注意:确保在两种情况下都必须要求输入密码.如果它没有要求输入密码,则意味着命令出错.
| 归档时间: |
|
| 查看次数: |
17280 次 |
| 最近记录: |