我需要在我的app中实现facebook登录。这是我的班级:
清单:
<meta-data android:name="com.facebook.sdk.ApplicationId" android:value="@string/facebook_app_id"/>
<activity android:name="com.facebook.FacebookActivity"
android:configChanges=
"keyboard|keyboardHidden|screenLayout|screenSize|orientation"
android:theme="@android:style/Theme.Translucent.NoTitleBar"
android:label="@string/app_name" />
<provider android:authorities="com.facebook.app.FacebookContentProvider"
android:name="com.facebook.FacebookContentProvider"
android:exported="true" />
我的班级:
public abstract class FaceBookActivityImpl extends BaseActivity {
private CallbackManager callbackManager;
private ShareDialog shareDialog;
@Override
protected void initView() {
FacebookSdk.sdkInitialize(getApplicationContext());
callbackManager = CallbackManager.Factory.create();
LoginManager.getInstance().registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResult) {
}
@Override
public void onCancel() {
}
@Override
public void onError(FacebookException e) {
}
});
FacebookSdk.addLoggingBehavior(LoggingBehavior.REQUESTS);
}
public CallbackManager getCalbackManager(){
return callbackManager;
}
public ShareDialog getShareDialog(){
if(shareDialog==null){
shareDialog = new ShareDialog(this);
// this part is optional
shareDialog.registerCallback(callbackManager, new FacebookCallback<Sharer.Result>() {
@Override
public void onSuccess(Sharer.Result result) {
DebugLog.d("share success " + result.getPostId());
}
@Override
public void onCancel() {
}
@Override
public void onError(FacebookException e) {
}
});
}
return shareDialog;
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
callbackManager.onActivityResult(requestCode, resultCode, data);
}
}
当用户登录时,我需要检查publish_actions以执行类似操作:
LoginManager.getInstance().registerCallback(((MainActivity) getContext()).getCalbackManager(), new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResult) {
DebugLog.d("login fb success "+loginResult.getRecentlyGrantedPermissions());
likeTopic();
}
@Override
public void onCancel() {
DebugLog.d("login fb cancel");
}
@Override
public void onError(FacebookException e) {
DebugLog.d("login fb error "+e.getMessage());
}
});
LoginManager.getInstance().logInWithPublishPermissions(((MainActivity) getContext()), Arrays.asList("publish_actions"));
但是,它总是取消:
DebugLog.d("login fb cancel");
我缺少什么,请帮助我,我已经研究了很长时间。 非常感谢你。
修改: 当它发生时,logcat(没有过滤器)显示:
Caused by: java.lang.ClassNotFoundException: Didn't find class "com.facebook.login.LoginClient$Request" on path: DexPathList[[directory "."],nativeLibraryDirectories=[/vendor/lib, /system/lib]]
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:67)
at java.lang.ClassLoader.loadClass(ClassLoader.java:497)
at java.lang.ClassLoader.loadClass(ClassLoader.java:457)
答案 0 :(得分:0)
我认为如果设备安装了原生Facebook应用程序,则会出现此问题。尝试在没有安装Facebook应用的设备上运行代码。
,请尝试从Facebook开发者的页面中删除该应用并重新添加。
在此处查看类似问题
Can't login to Facebook if Facebook app is installed
Android Class not found : Didn't find class ... on path: DexPathList : link of class failed : **
更新 - 重要
如果1234是您的应用ID,则需要在FacebookContentProvider
末尾添加应用ID ,例如FacebookContentProvider1234
。例如
<provider android:authorities="com.facebook.app.FacebookContentProvider1234"
android:name="com.facebook.FacebookContentProvider"
android:exported="true" />
答案 1 :(得分:0)
我想避免调用Facebook应用程序使用此设置Facebook登录行为仅使用身份验证对话框:
LoginManager.getInstance().setLoginBehavior( LoginBehavior.SUPPRESS_SSO );
或者,如果您使用LoginButton对象进行登录:
loginButton.setLoginBehavior( LoginBehavior.SUPPRESS_SSO );
答案 2 :(得分:0)
当我禁用已安装的Facebook应用时,我使用facebook sdk 4.6.0时遇到完全相同的问题。如果没有安装Facebook应用程序或安装了facebook应用程序,它需要一些时间来确定一切正常。
由于这是一个非常特殊的情况,安装和禁用了facebbook应用程序,因为我还提供了谷歌登录。我没有在这个问题上调查更多时间。
快乐的一天