首页 文章

Android Facebook登录“无法启动LoginActivity”

提问于
浏览
9

我已经安装并配置了所有链接Facebook SDK到我的Android应用程序 .

  • Facebook SDK在我的项目中

  • 我在Facebook APP ID中添加了我的APP ID

  • 我的Android Key Hash是正确的,并在Facebook Dev的董事会上链接

  • 我的清单中有活动"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,但我总是有相同的回溯,这是:

登录尝试失败:无法在com.facebook.login.LoginManager.startLogin(LoginManager.java:382)的com.facebook.login.LoginManager.logInWithReadPermissions(LoginManager.java:250)的com.facebook上启动LoginActivity . login.widget.LoginButton $ LoginClickListener.onClick(LoginButton.java:689)at com.facebook.FacebookButtonBase $ 1.onClick(FacebookButtonBase.java:310)

3 回答

  • 2

    我能够通过从AndroidManifest.xml中删除LoginActivity来解决这个问题

    <!--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" />
    
  • 25

    所以我遇到了同样的问题并通过...在Facebook developers page上正确设置我的应用程序来修复它 .

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

    • (Google Play)包名

    • class 名称

    • 一个密钥哈希

    一旦我填写这些,错误就消失了 .

  • 1

    正在开发的应用程序和facebook a / c的Hash Key将要求散列密钥两者应该相同 .

    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());
                }
    }
    

    在Activity的onCreate()中调用它,并从日志中复制该哈希键(以=符号结尾),然后注册到facebook a / c,你就完成了 .

相关问题