2015-04-16 54 views
9

我已经安装并配置了一切链接Facebook SDK到我的Android应用程序。Android Facebook登录“LoginActivity无法启动”

  • 的Facebook SDK是在我的项目
  • 我说我的应用程序ID在Facebook的应用程序ID
  • 我的Android密钥哈希是正确的,并在Facebook上开发的板连接
  • 我有活动“ com.facebook.FacebookActivity”在我的清单
  • 我有活动‘的com.facebook.LoginActivity’我的清单
  • 我有元数据facebook_app_id在我的清单中设置正确

的Facebook构件登录设置

<com.facebook.login.widget.LoginButton 
     android:id="@+id/login_button" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center_horizontal" 
     android:layout_marginTop="30dp" 
     android:layout_marginBottom="30dp" /> 

我的片段类

public class FragmentSetting extends android.support.v4.app.Fragment { 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    FacebookSdk.sdkInitialize(getActivity().getApplicationContext()); 
    SingletonUserData.setCallbackManager(CallbackManager.Factory.create()); 
} 

@Override 
public View onCreateView(LayoutInflater inflater,ViewGroup container, Bundle args) { 
    if (!SingletonUserData.isLogged()) { 
     view = inflater.inflate(R.layout.fragment_logme, container, false); 
     TextView facebook = (TextView) view.findViewById(R.id.LogByFacebook); 
     loginButton = (LoginButton) view.findViewById(R.id.login_button); 
     loginButton.setReadPermissions(Arrays.asList("public_profile", "user_friends", "email")); 
     loginButton.setFragment(this); 
     loginButton.registerCallback(SingletonUserData.getCallbackManager(), new FacebookCallback<LoginResult>() {...}); 

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    SingletonUserData.getCallbackManager().onActivityResult(requestCode, resultCode, data); 
} 

几个小时后,我无法找到的错误。 是因为片段吗?我在MainActivityToFragment tryed,但我始终不变的回溯,至极的是:在尝试

登录失败:LoginActivity不能在com.facebook.login.LoginManager.startLogin启动 (LoginManager.java:382) at com.facebook.login.LoginManager.logInWithReadPermissions(LoginManager.java:250) at com.facebook.login.widget.LoginButton $ LoginClickListener.onClick(LoginButton.java:689) at com.facebook.FacebookButtonBase $ 1.onClick (FacebookButtonBase.java:310)

+1

您已将facebookactivity添加到您的清单中,但是您是否已将loginactivity添加到清单中? – Laurenswuyts

+0

感谢您的快速回复,是的,我做过 –

+0

您是否找到解决方法? – gaurav414u

回答

23

我能解决这个问题,通过删除日志从闲置的AndroidManifest.xml我

<!--Remove this--> 
<activity android:name="com.facebook.LoginActivity" 
android:theme="@android:style/Theme.Translucent.NoTitleBar" 
android:label="@string/app_name" /> 

并添加

<!--Add this--> 
<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" /> 
+1

不幸的是,这并没有改变任何东西。不管怎么说,还是要谢谢你。 –

+3

这是sdk 4.0的正确答案。 – Hardy

+1

保存我的工作 –

2

所以我有同样的问题,并通过固定它...在Facebook developers page正确设置我的应用程序。

基本上我的应用程序是丢失:

  • (谷歌播放)包名
  • 类名
  • 关键哈希

有一次,我在填补这些,错误不见了。

1

正在开发的应用程序的Hash键和Facebook的a/c会问散列键都应该是相同的。

public void getHashkey(){ 
try { 
       PackageInfo packageInfo = getPackageManager().getPackageInfo(getPackageName(), 
         PackageManager.GET_SIGNATURES); 
       for (Signature signature : packageInfo.signatures) { 
        MessageDigest md = MessageDigest.getInstance("SHA"); 
        md.update(signature.toByteArray()); 
        Log.d("KeyHash:", Base64.encodeToString(md.digest(), Base64.DEFAULT)); 
       } 
      } catch (PackageManager.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()); 
      } 
} 

调用这个在活动的onCreate()和复制哈希键从日志(这将等号(=)结尾),只是注册到Facebook的A/C和U完成。