android - 通过 facebook android sdk 分享墙贴

标签 android facebook-android-sdk facebook-sdk-3.0

大家好,我是 Android 编程的新手。我想在 Facebook 上分享一张带有一些描述的图片。 我已经尝试了在 stackoverflow 的答案中解释的每一种方法。我的问题是 facebook 对话框打开但它没有指定的包参数。 请帮我解决一下这个。我已经尝试了将近 20 个不同的代码 fragment 。请给我完整的功能代码。

    @Override
        public void onClick(View v) {
            fb = new Facebook(app_id);
            Bundle par = new Bundle();
            par.putString("name", "Ass");
            fb.dialog(con,"feed",par, new DialogListener(){

                @Override
                public void onCancel() {
                    // TODO Auto-generated method stub

                }

                @Override
                public void onComplete(Bundle arg0) {
                    // TODO Auto-generated method stub

                }

                @Override
                public void onError(DialogError arg0) {
                    // TODO Auto-generated method stub

                }

                @Override
                public void onFacebookError(FacebookError arg0) {
                    // TODO Auto-generated method stub

                }});


        }
    });

}

最佳答案

您是否已经在开发页面上设置了应用程序的 facebook 端? 如果您打算使用他们的 API 和/或代表用户授权 token 进行图形请求或墙贴,则需要在 Facebook 上注册您的应用。

你应该阅读 this教程(查看第 5 部分以了解 fb 应用程序注册)及其所有相关信息,以真正开始在您的应用程序中进行 facebook 交互。 我知道我做了并最终为登录快捷方式或图形请求等创建了我自己的库......这不是那么简单,它也会花费你一些时间。

还有;

您使用的是 sdk 中的 loginButton 吗?像这样:

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

它会自动处理用户登录到 facebook,无论他是否安装了 facebook 应用程序,并检索 session 状态结果(onStatusChange 回调)。 确保您首先正确处理该问题,并且 session 已正确启动。

不过,发布您的日志可以让我们更好地了解您遇到的问题。

我不得不说,到目前为止,android 的 facebook api 非常可靠,所以你肯定做错了什么。

<<<<<< 编辑:>>>>>>>

那么好吧,假设您的用户已正确登录(我相信 session.getActiveSession() == Session.OPENED),下一步是确保您启用了必要的权限。 这个例子来自官方的facebook文档,试试吧(在你的应用中执行publishStory()):

private void publishStory() {
Session session = Session.getActiveSession();

if (session != null){

    // Check for publish permissions    
    List<String> permissions = session.getPermissions();
    if (!isSubsetOf(PERMISSIONS, permissions)) {
        pendingPublishReauthorization = true;
        Session.NewPermissionsRequest newPermissionsRequest = new Session
                .NewPermissionsRequest(this, PERMISSIONS);
    session.requestNewPublishPermissions(newPermissionsRequest);
        return;
    }

    Bundle postParams = new Bundle();
    postParams.putString("name", "Facebook SDK for Android");
    postParams.putString("caption", "Build great social apps and get more installs.");
    postParams.putString("description", "The Facebook SDK for Android makes it easier and faster to develop Facebook integrated Android apps.");
    postParams.putString("link", "https://developers.facebook.com/android");
    postParams.putString("picture", "https://raw.github.com/fbsamples/ios-3.x-howtos/master/Images/iossdk_logo.png");

    Request.Callback callback= new Request.Callback() {
        public void onCompleted(Response response) {
            JSONObject graphResponse = response
                                       .getGraphObject()
                                       .getInnerJSONObject();
            String postId = null;
            try {
                postId = graphResponse.getString("id");
            } catch (JSONException e) {
                Log.i(TAG,
                    "JSON error "+ e.getMessage());
            }
            FacebookRequestError error = response.getError();
            if (error != null) {
                Toast.makeText(getActivity()
                     .getApplicationContext(),
                     error.getErrorMessage(),
                     Toast.LENGTH_SHORT).show();
                } else {
                    Toast.makeText(getActivity()
                         .getApplicationContext(), 
                         postId,
                         Toast.LENGTH_LONG).show();
            }
        }
    };

    Request request = new Request(session, "me/feed", postParams, 
                          HttpMethod.POST, callback);

    RequestAsyncTask task = new RequestAsyncTask(request);
    task.execute();
}


private boolean isSubsetOf(Collection<String> subset, Collection<String> superset) {
    for (String string : subset) {
        if (!superset.contains(string)) {
            return false;
        }
    }
    return true;
}

代码使用在包中指定的图形参数向用户提要墙发出 POST。 如果 session 没有所需的发布权限,则会发出权限请求。如果用户授予了这些权限,则 RequestAsyncTask 应该在您下次调用该方法时执行。

如您所见,基本思路是让用户使用他的 Facebook 帐户登录(第一步),然后为该操作请求必要的权限,在这种情况下,发布墙上帖子的权限(第二步) ,最后向“me/feed”发出图形请求,其中包含墙贴所需的参数。

无论如何,如果您仍然遇到问题,请尝试从您的日志中进行调试,因为它表明请求失败是因为 session 无效还是没有权限等......

在这种情况下,请在此处发布您的日志,但这应该有效。

关于android - 通过 facebook android sdk 分享墙贴,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20304375/

相关文章:

iOS Facebook 登录教程

java - 空指针异常 : when trying to get user location from Facebook

java - 默认抽屉导航 View 到 ExpandableListView

java - 命名文件时禁止使用哪些字符以及如何删除它们?

android - Facebook 与来自 Android 应用程序的元数据共享链接

python-3.x - 在 Python 中导入 facebook 模块时出错

java - 开发第一个 Android 应用程序时出错

android - 创建圆形

android - 发布/创建从 Android 应用程序到 Facebook 的民意调查

java - 如何动态加载 R.styleable 资源?