我希望为我的应用程序生成一个应用程序签名,稍后将与Facebook集成.在Facebook的一个教程中,我发现了这个命令:
keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore | openssl sha1 -binary | openssl base64
Run Code Online (Sandbox Code Playgroud)
在本教程中,它表示通过运行此cmd,我的生成签名的过程将开始.
但是,此命令会出错:
openssl is not recognized as an internal or external command
Run Code Online (Sandbox Code Playgroud)
我怎么能摆脱这个?
我使用以下代码.我想要用户的出生日期,电子邮件和性别.请帮忙.如何检索这些数据?
这是我onViewCreated()在片段中的内容.
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
// Setup TextView.
mTextDetails = (TextView) view.findViewById(R.id.text_details);
// Set up Login Button.
LoginButton mButtonLogin = (LoginButton) view.findViewById(R.id.login_button);
// setFragment only if you are using it inside a Fragment.
mButtonLogin.setFragment(this);
mButtonLogin.setReadPermissions("user_friends");
mButtonLogin.setReadPermissions("public_profile");
mButtonLogin.setReadPermissions("email");
mButtonLogin.setReadPermissions("user_birthday");
// Register a callback method when Login Button is Clicked.
mButtonLogin.registerCallback(mCallbackManager, mFacebookCallback);
}
Run Code Online (Sandbox Code Playgroud)
这是我的回调方法.
private FacebookCallback<LoginResult> mFacebookCallback = new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResult) {
Log.d("Shreks Fragment", "onSuccess");
Profile profile = Profile.getCurrentProfile();
Log.d("Shreks …Run Code Online (Sandbox Code Playgroud) 我正在使用Android Studio关注Facebook SDK for Android.当我运行我的应用程序时,我收到了下面提到的警告.
Gradle: module 'facebook' won't be compiled. Unfortunately you can't have non-Gradle Java module and Android-Gradle module in one project.
Run Code Online (Sandbox Code Playgroud)
我该怎么解决这个问题?
我尝试了@Scott Barta的回答,并收到以下错误消息.
A problem occurred configuring project ':App'.
> Failed to notify project evaluation listener.
> A problem occurred configuring project ':libraries:facebook'.
> Failed to notify project evaluation listener.
> Could not resolve all dependencies for configuration ':libraries:facebook:_DebugCompile'.
> Could not find any version that matches com.android.support:support-v4:+.
Required by:
MyApplication2.libraries:facebook:unspecified
Run Code Online (Sandbox Code Playgroud) android facebook facebook-android-sdk android-studio android-gradle-plugin
我在Android Studio中使用facebook-android-sdk-4.19.0,然后按照Facebook快速入门指南访问https://developers.facebook.com/docs/android/getting-started(点击"快速启动"按钮使用您自己的Facebook帐户登录).在指南中,它被告知要在代码段中复制并粘贴以下代码以跟踪应用日志
import com.facebook.FacebookSdk;
import com.facebook.appevents.AppEventsLogger;
public class MyApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
FacebookSdk.sdkInitialize(getApplicationContext());
AppEventsLogger.activateApp(this);
}
}
Run Code Online (Sandbox Code Playgroud)
但是,当我在android studio中复制粘贴代码时,似乎不推荐使用所有的FacebookSdk.sdkInitialize()方法.这里的文档https://developers.facebook.com/docs/reference/android/current/class/FacebookSdk/没有说明使用什么方法来初始化sdk而不是sdkInitialize().我应该使用什么方法?
标题说明了一切.我正在使用自定义按钮来获取用户的Facebook信息(用于"注册"目的).然而,我不希望应用程序记住最后一个注册用户,也不想通过Facebook本机应用程序当前登录的用户.我希望每次都能弹出Facebook登录活动.这就是为什么我想以编程方式注销任何以前的用户.
我怎样才能做到这一点?这是我登录的方式:
private void signInWithFacebook() {
SessionTracker sessionTracker = new SessionTracker(getBaseContext(), new StatusCallback()
{
@Override
public void call(Session session, SessionState state, Exception exception) {
}
}, null, false);
String applicationId = Utility.getMetadataApplicationId(getBaseContext());
mCurrentSession = sessionTracker.getSession();
if (mCurrentSession == null || mCurrentSession.getState().isClosed()) {
sessionTracker.setSession(null);
Session session = new Session.Builder(getBaseContext()).setApplicationId(applicationId).build();
Session.setActiveSession(session);
mCurrentSession = session;
}
if (!mCurrentSession.isOpened()) {
Session.OpenRequest openRequest = null;
openRequest = new Session.OpenRequest(RegisterActivity.this);
if (openRequest != null) {
openRequest.setPermissions(null);
openRequest.setLoginBehavior(SessionLoginBehavior.SSO_WITH_FALLBACK);
mCurrentSession.openForRead(openRequest);
}
}else {
Request.executeMeRequestAsync(mCurrentSession, new Request.GraphUserCallback() {
@Override …Run Code Online (Sandbox Code Playgroud) 我真的遇到了Facebook哈希密钥问题.我在Eclipse中生成它..证明:

然后我去了https://developers.facebook.com/并注册了一个新的应用程序.

最后我将我的hashkey设置为Facebook开发人员的设置:

但不管我做什么我一直得到相同的错误日志:"密钥哈希B5dWUEYfZJL/........... jyA =与任何存储的密钥哈希值不匹配"
有人知道我做错了什么或如何解决这个问题?如果我在自己的应用程序中使用HelloFacebookSample中的id和名称,一切正常.所以它与我最有可能设置的密钥哈希,id或名称有关.
谢谢,Yenthe
我目前正在将我们的一个项目从maven转换为Gradle.文件夹结构如下:
gitRoot
settings.gradle
build.gradle
ProjectA
build.gradle
src/main/java
Libraries
SomeLib (git submodule)
ProjectBRoot (git submodule)
settings.gradle
build.gradle
ProjectB
build.gradle
src/main/java
Libraries
FacebookSDK/facebook
build.gradle
src
Run Code Online (Sandbox Code Playgroud)
所以看起来已经很复杂了.但是这个想法是ProjectB是一个图书馆项目,它应该能够单独构建和打包,这就是为什么它有自己的settings.gradle,据我所知它似乎工作正常,我有它建设并且它发现facebook就好了.
ProjectB/build.gradle包含此行
compile project(':libraries:facebook-android-sdk:facebook')
Run Code Online (Sandbox Code Playgroud)
ProjectBRoot/settings.gradle包含此行
include ':ProjectB', ':libraries:facebook-android-sdk:facebook'
Run Code Online (Sandbox Code Playgroud)
gitRoot/settings.gradle包含此行
include ':ProjectA', ':Libraries:ProjectBRoot:ProjectB'
Run Code Online (Sandbox Code Playgroud)
ProjectA/build.gradle包含此行
compile project(':Libraries:ProjectBRoot:ProjectB')
Run Code Online (Sandbox Code Playgroud)
当我运行构建时,我收到此错误
The TaskContainer.add() method has been deprecated and is scheduled to be removed in Gradle 2.0. Please use the create() method instead.
FAILURE: Build failed with an exception.
* Where:
Build file '/gitRoot/Libraries/ProjectBRoot/ProjectB/build.gradle' line: 17
* What went wrong:
A problem occurred …Run Code Online (Sandbox Code Playgroud) 我正在使用新的FaceBook SDK 3.0.在将图片从URL发布到"我/照片"时,我间歇性地获得了一个EOFException.我偶尔会遇到这个错误(约20次中有1次).
我还必须在获得之后添加,EOFException如果我再次重新发布,它会成功发布.
所以,暂时我编码自动重试一次,如果我得到EOFException解决方案似乎令人满意.
但是我需要知道导致它的原因,这是Android SDK中的一个错误.我用Google搜索了很多但却无法得到任何东西.
我发布了日志(出于安全原因删除了我的访问令牌和图片网址)
06-05 15:09:42.585: D/FacebookSDK.Request(16611): Request:
06-05 15:09:42.585: D/FacebookSDK.Request(16611): Id: 9
06-05 15:09:42.585: D/FacebookSDK.Request(16611): URL:https://graph.facebook.com/me/photos?caption=abc&format=json&sdk=android&migration_bundle=fbsdk%3A20121026&access_token=ADBCEFG&url=http%3A%2F%2Ftest.test.test%2Ftest%2Ftest%2F201695%2Ftest%2F18629
06-05 15:09:42.585: D/FacebookSDK.Request(16611): Method: POST
06-05 15:09:42.585: D/FacebookSDK.Request(16611): User-Agent: FBAndroidSDK.3.0.0
06-05 15:09:42.585: D/FacebookSDK.Request(16611): Content-Type: multipart/form-data; boundary=3i2ndDfv2rTHiSisAbouNdArYfORhtTPEefj3q2f
06-05 15:09:42.585: D/FacebookSDK.Request(16611): Parameters:
06-05 15:09:42.585: D/FacebookSDK.Request(16611): caption: abc
06-05 15:09:42.585: D/FacebookSDK.Request(16611): format: json
06-05 15:09:42.585: D/FacebookSDK.Request(16611): sdk: android
06-05 15:09:42.585: D/FacebookSDK.Request(16611): migration_bundle: fbsdk:20121026
06-05 15:09:42.585: D/FacebookSDK.Request(16611): access_token: ABCDEF
06-05 15:09:42.585: D/FacebookSDK.Request(16611): url: http://test.test.test/test/test/201695/test/18629
06-05 15:09:42.585: D/FacebookSDK.Request(16611): …Run Code Online (Sandbox Code Playgroud) 我已经学习了一些Facebook API 3.0教程,包括Login/Logout和Publish To Feed示例.所以登录以这种方式工作:
我不想让用户以这种方式登录.我希望他们在没有任何登录/注册的情况下使用我的应用程序,然后如果他们点击Facebook特定功能,例如在Facebook上分享笔记,那么应用程序应该询问他们是否让Facebook使用他们的应用程序或其他东西,你知道通常的东西.如果没有这个,我会在publishFeedDialog()函数中得到一个nullpointer,因为session是null,因为没有登录.
所以我的问题是,如何通过"登录"按钮忽略SplashFragment,因此当用户点击我的应用程序中的Facebook功能时,不会显示带有登录按钮的新屏幕,而只显示用户使用的默认Facebook身份验证窗口至?
我有
compile 'com.facebook.android:facebook-android-sdk:4.16.0'
Run Code Online (Sandbox Code Playgroud)
我的清单:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
...
<application
android:name=".YandexProvider"
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AutoTheme"
tools:replace="android:theme">
Run Code Online (Sandbox Code Playgroud)
如何解决编译错误:
Error:Execution failed for task ':app:processDebugManifest'.
> Manifest merger failed : Attribute activity#com.facebook.FacebookActivity@theme value=(@android:style/Theme.Translucent.NoTitleBar) from AndroidManifest.xml:69:13-72
is also present at [com.facebook.android:facebook-android-sdk:4.16.0] AndroidManifest.xml:32:13-63 value=(@style/com_facebook_activity_theme).
Suggestion: add 'tools:replace="android:theme"' to <activity> element at AndroidManifest.xml:66:9-70:47 to override.
Run Code Online (Sandbox Code Playgroud)