无法使用SDK打开facebook会话



我正试图在我的Facebook墙上发布一条消息,下面是我的代码示例:

 @Click (R.id.img_btn_facebook)
 @UiThread
 public void fbPostWall(){
    Session session = Session.getActiveSession();
    SessionState state = SessionState.OPENING;
    if (session == null)
      TestManager.getInstance().setActivity(getActivity()).setLoginListener(this).facebookLogin();
    Log.e("SESSION-STATUS", "" + session.getState());
    if (session != null || state.isOpened()){
        Log.e("FACEBOOK", "post link on the wall ...");
        Bundle params = new Bundle();
        params.putString("name", "This is a test");
        WebDialog feedDialog = (
                new WebDialog.FeedDialogBuilder(getActivity(),
                        session,
                        params))
                .setOnCompleteListener(new WebDialog.OnCompleteListener() {
                    @Override
                    public void onComplete(Bundle values,
                                           FacebookException error) {
                        if (error == null) {
                            // When the story is posted, echo the success
                            // and the post Id.
                            final String postId = values.getString("post_id");
                            if (postId != null) {
                                Toast.makeText(getActivity(),
                                        "Posted story, id: "+postId,
                                        Toast.LENGTH_SHORT).show();
                            } else {
                                // User clicked the Cancel button
                                Toast.makeText(getActivity().getApplicationContext(),
                                        "Publish cancelled",
                                        Toast.LENGTH_SHORT).show();
                            }
                        } else if (error instanceof FacebookOperationCanceledException) {
                            // User clicked the "x" button
                            Toast.makeText(getActivity().getApplicationContext(),
                                    "Publish cancelled",
                                    Toast.LENGTH_SHORT).show();
                        } else {
                            // Generic, ex: network error
                            Toast.makeText(getActivity().getApplicationContext(),
                                    "Error posting story",
                                    Toast.LENGTH_SHORT).show();
                        }
                    }
                })
                .build();
        feedDialog.show();
    }
}

当我点击"img_btn_facebook"按钮时,如果用户还没有在facebook上,就会打开登录会话。之后,Log.e("SESSION-STATUS","+SESSION.getState());始终提供会话状态﹕OPENING但重点是,我总是从Facebook SDK中收到以下错误消息:com.facebook.FacebookException:试图使用未打开的会话。

有人能帮我修一下吗?我想在我的facebook墙上发布一条消息,感谢我的Android应用程序。

是否包含在ActivityResult中??

@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        Session.getActiveSession().onActivityResult(this, requestCode,
                resultCode, data);
        }

在你的清单文件

<activity
        android:name="com.facebook.LoginActivity"
        android:label="@string/app_name"
        android:theme="@android:style/Theme.Translucent.NoTitleBar" />
    <meta-data
        android:name="com.facebook.sdk.ApplicationId"
        android:value="@string/app_id" />

并且确保您的facebook应用程序中有正确的哈希键值

要生成哈希密钥,请在您的主要活动中包含以下代码行

try {
        PackageInfo info = getPackageManager().getPackageInfo(
                "com.facebook.samples.hellofacebook", 
                PackageManager.GET_SIGNATURES);
        for (Signature signature : info.signatures) {
            MessageDigest md = MessageDigest.getInstance("SHA");
            md.update(signature.toByteArray());
            Log.d("KeyHash:", Base64.encodeToString(md.digest(), Base64.DEFAULT));
            }
    } catch (NameNotFoundException e) {
    } catch (NoSuchAlgorithmException e) {
    }

您将在控制台中获得哈希密钥,并将该密钥包含在facebookdevleopr

对于有人在使用facebook sdk时遇到问题:

1下载示例,测试它们是否不是您的手机(更改示例上的应用程序id以匹配您的手机);

2不要将具有其他目的的活动或片段用于facebook登录,而是仅为此创建一个这可能是一个冲突

3复制您需要的facebook示例类(选择活动或片段)并通过代码调用它

4根据您的需要调整复制的课程。

最新更新