Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/facebook/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将facebook登录整合到android应用程序中_Android_Facebook_Login - Fatal编程技术网

如何将facebook登录整合到android应用程序中

如何将facebook登录整合到android应用程序中,android,facebook,login,Android,Facebook,Login,我正在尝试将facebook登录集成到我的应用程序中 我浏览了本教程: 下载facebook sdk 3.5 一步一步-下载openssl,创建androidkeystore,生成hashkey,在facebook开发控制台中创建一个应用程序,给它我的包名,登录的活动,以及设备在日志控制台中打印给我的hashcode,如教程所示+我用openssl生成的hashkey,将app_id添加到strings文件中,并将所需的权限活动和元数据添加到android清单文件中 现在我打开应用程序并点击“使

我正在尝试将facebook登录集成到我的应用程序中

我浏览了本教程:

下载facebook sdk 3.5

一步一步-下载openssl,创建androidkeystore,生成hashkey,在facebook开发控制台中创建一个应用程序,给它我的包名,登录的活动,以及设备在日志控制台中打印给我的hashcode,如教程所示+我用openssl生成的hashkey,将app_id添加到strings文件中,并将所需的权限活动和元数据添加到android清单文件中

现在我打开应用程序并点击“使用facebook登录按钮” 它请求我对用户配置文件进行许可,我单击了“确定”

然后日志会打印此异常:

10-16 19:51:20.718: W/Bundle(8444): Key com.facebook.platform.protocol.PROTOCOL_VERSION expected String but value was a java.lang.Integer.  The default value <null> was returned.
10-16 19:51:20.718: W/Bundle(8444): Attempt to cast generated internal exception:
10-16 19:51:20.718: W/Bundle(8444): java.lang.ClassCastException: java.lang.Integer
10-16 19:51:20.718: W/Bundle(8444):     at android.os.Bundle.getString(Bundle.java:1040)
10-16 19:51:20.718: W/Bundle(8444):     at android.content.Intent.getStringExtra(Intent.java:3412)
10-16 19:51:20.718: W/Bundle(8444):     at com.facebook.AuthorizationClient$KatanaLoginDialogAuthHandler.tryAuthorize(AuthorizationClient.java:829)
10-16 19:51:20.718: W/Bundle(8444):     at com.facebook.AuthorizationClient.tryCurrentHandler(AuthorizationClient.java:278)
10-16 19:51:20.718: W/Bundle(8444):     at com.facebook.AuthorizationClient.tryNextHandler(AuthorizationClient.java:244)
10-16 19:51:20.718: W/Bundle(8444):     at com.facebook.AuthorizationClient$GetTokenAuthHandler.getTokenCompleted(AuthorizationClient.java:778)
10-16 19:51:20.718: W/Bundle(8444):     at com.facebook.AuthorizationClient$GetTokenAuthHandler$1.completed(AuthorizationClient.java:737)
10-16 19:51:20.718: W/Bundle(8444):     at com.facebook.internal.PlatformServiceClient.callback(PlatformServiceClient.java:144)
10-16 19:51:20.718: W/Bundle(8444):     at com.facebook.internal.PlatformServiceClient.handleMessage(PlatformServiceClient.java:128)
10-16 19:51:20.718: W/Bundle(8444):     at com.facebook.internal.PlatformServiceClient$1.handleMessage(PlatformServiceClient.java:54)
10-16 19:51:20.718: W/Bundle(8444):     at android.os.Handler.dispatchMessage(Handler.java:99)
10-16 19:51:20.718: W/Bundle(8444):     at android.os.Looper.loop(Looper.java:130)
10-16 19:51:20.718: W/Bundle(8444):     at android.app.ActivityThread.main(ActivityThread.java:3906)
10-16 19:51:20.718: W/Bundle(8444):     at java.lang.reflect.Method.invokeNative(Native Method)
10-16 19:51:20.718: W/Bundle(8444):     at java.lang.reflect.Method.invoke(Method.java:507)
10-16 19:51:20.718: W/Bundle(8444):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:840)
10-16 19:51:20.718: W/Bundle(8444):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:598)
10-16 19:51:20.718: W/Bundle(8444):     at dalvik.system.NativeStart.main(Native Method)
10-16 19:51:20.718:W/Bundle(8444):Key com.facebook.platform.protocol.protocol\u版本应为字符串,但值为java.lang.Integer。返回了默认值。
10-16 19:51:20.718:W/束(8444):尝试强制转换生成的内部异常:
10-16 19:51:20.718:W/Bundle(8444):java.lang.ClassCastException:java.lang.Integer
10-16 19:51:20.718:W/Bundle(8444):位于android.os.Bundle.getString(Bundle.java:1040)
10-16 19:51:20.718:W/Bundle(8444):位于android.content.Intent.getStringExtra(Intent.java:3412)
10-16 19:51:20.718:W/Bundle(8444):在com.facebook.AuthorizationClient$KatanaLoginDialogAuthHandler.tryAuthorize(AuthorizationClient.java:829)
10-16 19:51:20.718:W/Bundle(8444):在com.facebook.AuthorizationClient.tryCurrentHandler(AuthorizationClient.java:278)
10-16 19:51:20.718:W/Bundle(8444):位于com.facebook.AuthorizationClient.tryNextHandler(AuthorizationClient.java:244)
10-16 19:51:20.718:W/Bundle(8444):在com.facebook.AuthorizationClient$gettokenauthnhandler.getTokenCompleted(AuthorizationClient.java:778)
10-16 19:51:20.718:W/Bundle(8444):在com.facebook.AuthorizationClient$GetTokenAuthHandler$1.完成(AuthorizationClient.java:737)
10-16 19:51:20.718:W/Bundle(8444):位于com.facebook.internal.PlatformServiceClient.callback(PlatformServiceClient.java:144)
10-16 19:51:20.718:W/Bundle(8444):位于com.facebook.internal.PlatformServiceClient.handleMessage(PlatformServiceClient.java:128)
10-16 19:51:20.718:W/Bundle(8444):在com.facebook.internal.PlatformServiceClient$1.handleMessage(PlatformServiceClient.java:54)
10-16 19:51:20.718:W/Bundle(8444):位于android.os.Handler.dispatchMessage(Handler.java:99)
10-16 19:51:20.718:W/Bundle(8444):位于android.os.Looper.loop(Looper.java:130)
10-16 19:51:20.718:W/Bundle(8444):位于android.app.ActivityThread.main(ActivityThread.java:3906)
10-16 19:51:20.718:W/Bundle(8444):位于java.lang.reflect.Method.invokenactive(本机方法)
10-16 19:51:20.718:W/Bundle(8444):位于java.lang.reflect.Method.invoke(Method.java:507)
10-16 19:51:20.718:W/Bundle(8444):位于com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:840)
10-16 19:51:20.718:W/Bundle(8444):位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:598)
10-16 19:51:20.718:W/束(8444):位于dalvik.system.Nativestar.main(本机方法)
这是一个警告,应用程序没有因此崩溃,但登录本身失败

这是我的登录流代码:

 import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;

import com.facebook.Session;
import com.facebook.SessionState;
import com.facebook.UiLifecycleHelper;

public class MainActivity extends FragmentActivity {

private static final int SPLASH = 0;
private static final int SELECTION = 1;
private static final int FRAGMENT_COUNT = SELECTION + 1;

private Fragment[] fragments = new Fragment[FRAGMENT_COUNT];

private boolean isResumed = false;

private UiLifecycleHelper uiHelper;
private Session.StatusCallback callback = 
    new Session.StatusCallback() {
    @Override
    public void call(Session session, 
            SessionState state, Exception exception) {
        onSessionStateChange(session, state, exception);
    }
};
/**
 * @param savedInstanceState
 */
@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    uiHelper = new UiLifecycleHelper(this, callback);
    uiHelper.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    FragmentManager fm = getSupportFragmentManager();
    fragments[SPLASH] = fm.findFragmentById(R.id.splashFragment);
    fragments[SELECTION] = fm.findFragmentById(R.id.selectionFragment);

    FragmentTransaction transaction = fm.beginTransaction();
    for (int i = 0; i < fragments.length; i++) {
        transaction.hide(fragments[i]);
    }
    transaction.commit();
}


private void showFragment(int fragmentIndex, boolean addToBackStack) {
    FragmentManager fm = getSupportFragmentManager();
    FragmentTransaction transaction = fm.beginTransaction();
    for (int i = 0; i < fragments.length; i++) {
        if (i == fragmentIndex) {
            transaction.show(fragments[i]);
        } else {
            transaction.hide(fragments[i]);
        }
    }
    if (addToBackStack) {
        transaction.addToBackStack(null);
    }
    transaction.commit();
}

@Override
public void onResume() {
    super.onResume();
    uiHelper.onResume();
    isResumed = true;
}

@Override
public void onPause() {
    super.onPause();
    uiHelper.onPause();
    isResumed = false;
}

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

@Override
public void onDestroy() {
    super.onDestroy();
    uiHelper.onDestroy();
}

@Override
protected void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    uiHelper.onSaveInstanceState(outState);
}

private void onSessionStateChange(Session session, SessionState state, Exception exception) {
    // Only make changes if the activity is visible
    if (isResumed) {
        FragmentManager manager = getSupportFragmentManager();
        // Get the number of entries in the back stack
        int backStackSize = manager.getBackStackEntryCount();
        // Clear the back stack
        for (int i = 0; i < backStackSize; i++) {
            manager.popBackStack();
        }
        if (state.isOpened()) {
            // If the session state is open:
            // Show the authenticated fragment
            showFragment(SELECTION, false);
        } else if (state.isClosed()) {
            // If the session state is closed:
            // Show the login fragment
            showFragment(SPLASH, false);
        }
    }
}

@Override
protected void onResumeFragments() {
    super.onResumeFragments();
    Session session = Session.getActiveSession();

    if (session != null && session.isOpened()) {
        // if the session is already open,
        // try to show the selection fragment
        showFragment(SELECTION, false);
    } else {
        // otherwise present the splash screen
        // and ask the person to login.
        showFragment(SPLASH, false);
    }
}
导入android.content.Intent;
导入android.os.Bundle;
导入android.support.v4.app.Fragment;
导入android.support.v4.app.FragmentActivity;
导入android.support.v4.app.FragmentManager;
导入android.support.v4.app.FragmentTransaction;
导入com.facebook.Session;
导入com.facebook.SessionState;
导入com.facebook.ui生命周期帮助;
公共类MainActivity扩展了FragmentActivity{
私有静态最终int SPLASH=0;
私有静态最终整数选择=1;
私有静态最终整型片段计数=SELECTION+1;
私有片段[]片段=新片段[Fragment_COUNT];
私有布尔值isResumed=false;
私人UiLifecycleHelper uiHelper;
private Session.StatusCallback回调=
新建会话。StatusCallback(){
@凌驾
公共无效呼叫(会话,
会话状态(状态、异常){
onSessionStateChange(会话、状态、异常);
}
};
/**
*@param savedInstanceState
*/
@凌驾
创建时受保护的void(Bundle savedInstanceState){
//TODO自动生成的方法存根
super.onCreate(savedInstanceState);
uiHelper=新UiLifecycleHelper(此为回调);
uiHelper.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
FragmentManager fm=getSupportFragmentManager();
片段[SPLASH]=fm.findFragmentById(R.id.splashFragment);
片段[SELECTION]=fm.findFragmentById(R.id.selectionFragment);
FragmentTransaction=fm.beginTransaction();
for(int i=0;i