Android Facebook 登录回调永远不会触发

Posted

技术标签:

【中文标题】Android Facebook 登录回调永远不会触发【英文标题】:Android Facebook login callbacks never fire 【发布时间】:2015-06-27 18:41:59 【问题描述】:

我使用 facebook 登录按钮创建了一个活动,并在 onCreate 方法中注册了回调。现在,当我按下登录按钮并通过 facebook 登录时,我希望我的回调会被触发,但它们不会。我做错了什么?

    CallbackManager callbackManager;
    LoginButton loginButton;

    @Override
    protected void onCreate(Bundle savedInstanceState) 
        FacebookSdk.sdkInitialize(getApplicationContext());

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);

        loginButton = (LoginButton) findViewById(R.id.login_button);
        loginButton.setReadPermissions("user_friends");
        callbackManager = CallbackManager.Factory.create();

        loginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() 
            @Override
            public void onSuccess(LoginResult loginResult) 
                Toast.makeText(getApplicationContext(), "Success!", Toast.LENGTH_LONG).show();
            

            @Override
            public void onCancel() 
                Toast.makeText(getApplicationContext(), "Cancelled!", Toast.LENGTH_LONG).show();
            

            @Override
            public void onError(FacebookException e) 
                Toast.makeText(getApplicationContext(), "Error!", Toast.LENGTH_LONG).show();
            
        );
    

【问题讨论】:

Facebook 活动开始了吗?您需要将其添加到您的清单中并检查 onActivityResult 方法! 是的,我看到我在其中授予我的应用权限的 facebook 窗口。我应该在onActivityResult 中添加什么? @LeonardoFerrari 天哪,我智障了。谢谢你。现在可以了。 没问题!发布您的解决方案作为答案,以便您将来可以帮助其他人! 【参考方案1】:

因为您发布的回调代码不起作用。

    我假设您已经在 facebook 开发者控制台上创建了一个项目,获得了开发哈希并且状态设置为公开。

    您的应用程序清单具有应用程序 ID 的元数据标记。

因此,进一步了解您的代码,在您的活动中添加 onActivityResult() 并将其转发给您的 callbackManager。 (Facebook Documentation)

如果登录成功,LoginResult 参数具有新的 AccessToken,以及最近授予或拒绝的权限。

您不需要 registerCallback 即可成功登录,您可以选择使用下面描述的 AccessTokenTracker 类来跟踪当前访问令牌的更改。

然后在onActivityResult()中将登录结果转发到onCreate()中创建的callbackManager:

 @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) 
        super.onActivityResult(requestCode, resultCode, data);
        callbackManager.onActivityResult(requestCode, resultCode, data);
    

【讨论】:

【参考方案2】:

我也遇到了同样的问题。请检查您是否在清单文件中添加了以下内容:

<activity
    android:name="com.facebook.CustomTabActivity"
    android:exported="true">
    <intent-filter>
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.BROWSABLE" />
        <data android:scheme="@string/fb_login_protocol_scheme" />
    </intent-filter>
</activity>

您的 strings.xml 中包含以下内容:

<string name="fb_login_protocol_scheme">fbAPP_ID</string>

请注意,在上述行中,您的应用 ID 应以“fb”开头。 Facebook 文档中明确提到了这一点,而我没有注意到这个微小的细节。 如果你的 App ID 是 1234567,你应该使用 fb1234567 但是,当您调用 FacebookSdk.setApplicationId() 时,您不需要为 fb 加上前缀。 参考:https://developers.facebook.com/docs/facebook-login/android

【讨论】:

以上是关于Android Facebook 登录回调永远不会触发的主要内容,如果未能解决你的问题,请参考以下文章

Facebook SDK 登录永远不会在 iOS 9 上回调我的应用程序

用户登录后 Facebook 不会重定向到回调 URL

解析:[PFFacebookUtils reauthorizeUser:] 回调永远不会被调用

phonegap pushwoosh 插件 registerDevice 回调函数永远不会在 android 上触发

如果安装了 Facebook 应用程序,PFFacebookUtils 登录方法不会执行任何操作

facebook android sdk 4.0,从 LoginManager 注销回调的方法