当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《Android/Java-将简单文本发布到Facebook墙上?》经验,为你挑选了2个好方法。

我正试图在我的应用程序中将发布集成到一个人的墙上.我已经有一个区域,用户可以保存他/她的用户名和密码(加密).我希望我的程序能够回忆起保存的用户名和密码,将其传递给Facebook进行身份验证,然后允许应用程序将简单文本(也可能是链接)发布到用户的墙上.

也就是说,我已经阅读了Facebook开发者页面上的所有内容(api看起来对我来说完全陌生......我以前从未做过任何类型的网络应用程序开发......只是桌面应用程序),并尝试使用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可能不允许这样做.我会继续调查.



1> RyanM..:

在汤姆的帮助下我想出来了(谢谢).关键是使用Facebook Android SDK创建一个带有"stream.publish"API调用的对话框.以下是步骤:

    下载官方Facebook Android SDK:http://github.com/facebook/facebook-android-sdk

    将项目文件导入Eclipse.

    将项目导出为*.jar文件.(这可能会导致冲突)

    [UPDATE]

    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",那么添加这个:"import com.android.myapp.R;").如果需要,请转到#5.

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

    请看以下简化示例代码:


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



2> 小智..:
AsyncFacebookRunner mAsyncRunner;
    Facebook    facebook =new Facebook("Your app id");

btnLogin.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View arg0) {
                // TODO Auto-generated method stub
                facebook.authorize(FbdemoActivity.this, new String[]{ "user_photos,publish_checkins,publish_actions,publish_stream"},new DialogListener() {
                    @Override
                    public void onComplete(Bundle values) {



                    }

                    @Override
                    public void onFacebookError(FacebookError error) {
                    }

                    @Override
                    public void onError(DialogError e) {
                    }

                    @Override
                    public void onCancel() {
                    }
                });

            }
        });

    public void postOnWall(String msg) {
            Log.d("Tests", "Testing graph API wall post");
             try {
                    String response = facebook.request("me");
                    Bundle parameters = new Bundle();
                    parameters.putString("message", msg);
                    parameters.putString("description", "test test test");
                    response = facebook.request("me/feed", parameters, 
                            "POST");
                    Log.d("Tests", "got response: " + response);
                    if (response == null || response.equals("") || 
                            response.equals("false")) {
                       Log.v("Error", "Blank response");
                   }
             } catch(Exception e) {
                 e.printStackTrace();
             }

推荐阅读
贾志军
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有