通过 facebook android sdk 分享墙帖

Posted

技术标签:

【中文标题】通过 facebook android sdk 分享墙帖【英文标题】:Sharing a wall post by facebook android sdk 【发布时间】:2013-11-30 19:02:38 【问题描述】:

您好,我是 android 编程新手。我想在 facebook 上分享一张带有一些描述的图片。 我已经尝试了在***的答案中解释的每种方法。我的问题是 facebook 对话框打开,但它没有指定的捆绑参数。 请帮我解决一下这个。我已经尝试了近 20 种不同的代码 sn-ps。请给我功能齐全的代码。

    @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

                );


        
    );


【问题讨论】:

【参考方案1】:

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

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

还有;

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

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

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

不过,发布您的日志会让我们更好地了解您遇到的情况。

我不得不说,到目前为止,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。 如果会话没有所需的发布权限,则会发出权限请求。如果用户授予了这些权限,则下次调用该方法时应执行 RequestAsyncTask。

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

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

在这种情况下在这里发布您的日志,但这应该可以。

【讨论】:

我已经正确设置了 facebook 端。我的 facebook 应用程序有权发布用户行为。我没有使用 android sdk 登录按钮。请告诉我在 facebook 上分享带有描述的图片的正确方法 是的,试试看。在您允许发布权限后,再次单击请求。 亲爱的我已经测试过了,但都是徒劳的。 logcat 中没有任何内容,就像点击事件没有发生任何事情一样。我一直很沮丧。我应该把代码发给你吗? 是的,如果您可以粘贴相关代码,它可能有助于识别问题。无论哪种方式,在我第一次回复时尝试使用 facebook 登录小部件,只是为了丢弃会话初始化可能出现的问题。 好的,我强烈建议您通过本教程,它在开始时对我有很大帮助:developers.facebook.com/docs/android/publish-to-feed 它最终会按照您想要的方式逐步完成,除了发布的部分来自设备资产文件夹的图片,而不是它的网址。我会首先尝试正确获取该教程并从那里修改您的代码。如果我不能进一步帮助您,我很抱歉,如果您能为我的努力投票,我仍然很感激......祝你好运!如果您有任何问题,请随时提出!

以上是关于通过 facebook android sdk 分享墙帖的主要内容,如果未能解决你的问题,请参考以下文章

Facebook 用户通过 Facebook SDK - Android 登录后保持登录状态

通过 facebook android sdk 分享墙帖

Android Facebook sdk 覆盖登录按钮

通过facebook sdk分享自定义TEXT状态

Android:在eclipse中导入facebook sdk 4.10.1

安卓。通过 Facebook SDK 4.X 向 facebook messenger 发送文本