Android/Java -- 将简单的文本发布到 Facebook 墙上? [英] Android/Java -- Post simple text to Facebook wall?

查看:24
本文介绍了Android/Java -- 将简单的文本发布到 Facebook 墙上?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试从我的应用程序中将帖子集成到一个人的墙上.我已经有一个用户可以保存他/她的用户名和密码(加密)的区域.我希望我的程序能够调用保存的用户名和密码,将其传递给 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 最近更新了源代码,我注意到图标文件导致资源 ID 与我的项目(Android 1.5+)发生冲突.我的解决方案是忘记导出为 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.

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

  5. 看下面的简化示例代码:

<前><代码>导入 android.app.Activity;导入 android.os.Bundle;导入 android.view.View;导入 android.view.View.OnClickListener;导入 android.widget.LinearLayout;导入 com.facebook.android.*;导入 com.facebook.android.Facebook.DialogListener;公共类 FacebookActivity 扩展了 Activity 实现了 DialogListener,点击监听器{私人 Facebook facebookClient;私有 LinearLayout facebookButton;@覆盖protected void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);this.setContentView(R.layout.test);//我的布局xmlfacebookButton = (LinearLayout)this.findViewById(R.id.Test_Facebook_Layout);}@覆盖public void onComplete(捆绑值){如果 (values.isEmpty()){//点击跳过"?返回;}//如果 facebookClient.authorize(...) 成功,则运行//这也在成功发布后运行//发布后,post_id"被添加到值包中//我用它来区分来自//faceBook.authorize(...) 和来自成功帖子的调用//有没有更好的方法来做到这一点?if (!values.containsKey("post_id")){尝试{捆绑参数 = new Bundle();parameters.putString("message", "this is a test");//要贴到墙上的消息facebookClient.dialog(this, "stream.publish", parameters, this);//"stream.publish" 是一个 API 调用}捕获(例外 e){//TODO: 处理异常System.out.println(e.getMessage());}}}@覆盖public void onError(DialogError e){System.out.println("错误:" + e.getMessage());}@覆盖公共无效 onFacebookError(FacebookError e){System.out.println("错误:" + e.getMessage());}@覆盖公共无效 onCancel(){}@覆盖公共无效 onClick(查看 v){如果 (v == facebookButton){facebookClient = 新 Facebook();//将 APP_API_ID 替换为您自己的facebookClient.authorize(this, APP_API_ID,new String[] {"publish_stream", "read_stream", "offline_access"}, this);}}}

I'm trying to integrate posting to one's wall from within my app. I already have an area where the user can save his/her username and password (encrypted). I would like my program to recall the saved username and password, pass that to Facebook for authentication, and then allow the app to post simple text (maybe a link too) to the user's wall.

That said, I've read everything on the developer pages at Facebook (the api looks completely foreign to me... I've never done any type of web app development before... just desktop apps), and experimented with the Java libraries here but to be honest, I don't understand any of the various implementations. Some claim to be simple to use, but apparently they are all way above my head.

I've even tried messing with the official Facebook Android SDK, but that uses a webview interface, and I can't pass in the username and password for easy authentication. Plus, I'm still clueless as to how to post to the wall even after correct authentication.

Please help. Thanks.

Oh, btw I already have a Facebook API key and Application ID.

[UPDATE 1]

For further clarification: If I use the following code snippet with the official Facebook Android SDK http://github.com/facebook/facebook-android-sdk what should I do next (after the user has logged-in)? This is unclear to me.

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

where "this" is an Activity that implements a DialogListener, and "[APP ID]" is my Facebook application ID.

Thanks.

[UPDATE 2]

I found a solution (see below), though the only thing missing is the ability to auto-populate the login text boxes with the data I have stored in the app. The official Facebook Android SDK may not allow for this. I'll keep looking into it.

解决方案

I figured it out, with Tom's help (thanks). The key was creating a dialog with the "stream.publish" API call, using the Facebook Android SDK. Here are the steps:

  1. Download the official Facebook Android SDK : http://github.com/facebook/facebook-android-sdk
  2. Import the project files into Eclipse.
  3. Export the project as a *.jar file. (this might cause a conflict)

    [UPDATE]

    Facebook recently updated the source code and I noticed the icon file caused resource id conflicts with my projects (Android 1.5+). My solution is to forget about exporting as a jar. Instead, copy the Facebook "com" folder directly into your app's "src" folder (i.e. "com.facebook.android" should be a package in your app... right alongside your source files). If you already have a "com" folder in your "src" folder, don't worry about any dialog boxes that appear about overwriting files, none of your source files should be overwritten. Go back into Eclipse, and refresh the "src" folder and "com.facebook.android" should now be listed as a package. Copy one of the included Facebook icons to your app's "drawable" folder and refresh that as well. Eclipse will complain about the "FbDialog.java" file... just add an import pointing to your app's "R" file to the header of that file (e.g. if your app's package name is "com.android.myapp," then add this: "import com.android.myapp.R;"). Go to #5 if you needed to do this.

  4. Add the .jar file to your project's build path

  5. Look at the following simplified example code:


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);
        }
    }
}

这篇关于Android/Java -- 将简单的文本发布到 Facebook 墙上?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆