当前位置: 首页 > 面试题库 >

Android / Java —将简单文本发布到Facebook墙?

商夜洛
2023-03-14
问题内容

我正在尝试从我的应用程序中集成发布到墙上。我已经有一个用户可以在其中保存用户名和密码(已加密)的区域。我希望我的程序重新调用保存的用户名和密码,将其传递给Facebook进行身份验证,然后允许该应用将简单的文本(也可能是链接)发布到用户的墙上。

就是说,我已经阅读了Facebook开发人员页面上的所有内容(该API对我来说似乎完全陌生。我从未做过任何类型的Web应用程序开发……只是台式机应用程序),并尝试了Java 这里的库,但老实说,我不了解任何各种实现。有些人声称使用简单,但显然它们已经超出了我的头脑。

我什至尝试过使用官方的Facebook Android SDK,但它使用了webview界面,并且我无法通过用户名和密码进行身份验证。另外,即使经过正确的身份验证,我仍然对如何张贴在墙上一无所知。

请帮忙。谢谢。

哦,顺便说一句,我已经有了一个Facebook API密钥和应用程序ID。

[更新1]

为了进一步说明:如果我在官方的Facebook Android SDK中使用以下代码段http://github.com/facebook/facebook-android-sdk,下一步(在用户登录后)该怎么办?我不清楚。

Facebook facebookClient = new Facebook();
facebookClient.authorize(this, "[APP ID]", new String[] {"publish_stream", "read_stream", "offline_access"}, this);

其中“ this”是一个实现DialogListener的Activity,而“ [APP ID]”是我的Facebook应用程序ID。

谢谢。

[更新2]

我找到了一个解决方案(见下文),尽管唯一缺少的是能够使用我存储在应用程序中的数据自动填充登录文本框的功能。官方的Facebook Android SDK可能不允许这样做。我会继续调查。


问题答案:

在汤姆(Tom)的帮助下,我找到了答案(谢谢)。关键是使用Facebook Android SDK通过“ stream.publish” API调用创建对话框。步骤如下:

  1. 下载官方的Facebook Android SDK:http : //github.com/facebook/facebook-android-sdk
  2. 将项目文件导入Eclipse。
  3. 将项目导出为* .jar文件。(这可能会导致冲突)

[更新]

Facebook最近更新了源代码,我注意到该图标文件与我的项目(Android 1.5+)导致资源ID冲突。我的解决方案是忘记导出为jar。相反,直接将Facebook“ com”文件夹复制到应用程序的“ src”文件夹中(即“ com.facebook.android”应为应用程序中的一个包…与源文件一起)。如果“ src”文件夹中已经有一个“ com”文件夹,则不必担心出现任何有关覆盖文件的对话框,任何源文件都不应被覆盖。返回Eclipse,并刷新“ src”文件夹,“ com.facebook.android”现在应该作为软件包列出。将其中包含的Facebook图标之一复制到应用程序的“可绘制”文件夹中,并对其进行刷新。Eclipse会抱怨“ FbDialog.java”文件…只需将指向你应用程序“ R”文件的导入添加到该文件的头(例如,如果你应用程序的包名称是“ com.android.myapp”,则添加此:“导入com.android.myapp.R;”)。如果需要,请转到#5。

  1. 将.jar文件添加到项目的构建路径

  2. 查看以下简化的示例代码:

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.LinearLayout;
import com.facebook.android.*;
import com.facebook.android.Facebook.DialogListener;

public class FacebookActivity extends Activity implements DialogListener,
        OnClickListener
{

    private Facebook facebookClient;
    private LinearLayout facebookButton;

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        this.setContentView(R.layout.test);//my layout xml

        facebookButton = (LinearLayout)this.findViewById(R.id.Test_Facebook_Layout);

    }

    @Override
    public void onComplete(Bundle values)
    {

        if (values.isEmpty())
        {
            //"skip" clicked ?
            return;
        }

        // if facebookClient.authorize(...) was successful, this runs
        // this also runs after successful post
        // after posting, "post_id" is added to the values bundle
        // I use that to differentiate between a call from
        // faceBook.authorize(...) and a call from a successful post
        // is there a better way of doing this?
        if (!values.containsKey("post_id"))
        {
            try
            {
                Bundle parameters = new Bundle();
                parameters.putString("message", "this is a test");// the message to post to the wall
                facebookClient.dialog(this, "stream.publish", parameters, this);// "stream.publish" is an API call
            }
            catch (Exception e)
            {
                // TODO: handle exception
                System.out.println(e.getMessage());
            }
        }
    }

    @Override
    public void onError(DialogError e)
    {
        System.out.println("Error: " + e.getMessage());
    }

    @Override
    public void onFacebookError(FacebookError e)
    {
        System.out.println("Error: " + e.getMessage());
    }

    @Override
    public void onCancel()
    {
    }

    @Override
    public void onClick(View v)
    {
        if (v == facebookButton)
        {
            facebookClient = new Facebook();
            // replace APP_API_ID with your own
            facebookClient.authorize(this, APP_API_ID,
                new String[] {"publish_stream", "read_stream", "offline_access"}, this);
        }
    }
}


 类似资料:
  • 问题内容: 我正在尝试将图片张贴到Facebook的墙上。我已成功登录并在墙上张贴文字。但是,当我尝试发布图片时,没有任何反应。 我正在使用Android Facebook SDK。 这是我到目前为止的内容: Toast显示8733,这意味着字节数组不为空 注意 Logcat输出一些警告(不是错误): (在彼此下方显示几次。) 我究竟做错了什么? 解决了。 这是我所做的,以使其正常工作: 和辅助方

  • 问题内容: 我做了很多搜索,发现过时的教程不起作用… 我有一个使用PHP制作的网站,当我在管理区域中提交特定表单时,我想发布到我的Facebook“粉丝页面” 没有可用的RSS,因此您有任何示例使用php sdk直接发布到Facebook粉丝页面(而不是用户墙)吗? 谢谢! 问题答案: 最终,经过大量测试,它在没有PHP SDK的情况下仍然有效。这是分步指南: 1.获取权限和页面令牌 然后从左侧的

  • Facebook Instant Games 跟微信小游戏相比,本质上的区别在于 Facebook Instant Games 运行于纯 HTML5 环境。因此它不仅可以在手机上,还可以在桌面浏览器上运行,开发和调试更加便捷。 目前 Cocos Creator 为用户完成的工作包括: 集成了 Facebook Instant Games SDK,并且自动进行了初始化,用户能直接调用相关的 API

  • 问题内容: 是否有工具或脚本可以轻松地将一堆JAR文件合并为一个JAR文件?一个好处是可以轻松设置主文件清单并使之可执行。 具体情况是Java重组文本工具。我想用类似的东西来运行它: 据我所知,它没有依赖关系,这表明它不应该是一个简单的单文件工具,但是下载的ZIP文件包含许多库。 如你所见,不需要手动执行此操作有些可取。 到目前为止,我只尝试了AutoJar和ProGuard,它们都很容易上手。看

  • 我有一个应用程序,可以使用Facebook SDK将本机(MOV文件)视频发布到FacebookiOS。它一直运行正常,直到几周前才出现以下错误: 完整的错误字符串是: error Domain = com . Facebook . SDK Code = 5 "操作无法完成。(com.facebook.sdk错误5。)" UserInfo = 0x1ea 42880 { com . Faceboo

  • 嘿,有的人,我是Android和Kotlin的新手,你能帮我这个请。 在这里,结果发布到吐司,我希望它在输入框中,如何做到这一点?