Android 一键发布 Facebook 帖文

使用Facebook官方API发布POST

一般遇到的需求都是做分享操作,现在国内已经有很多一键分享的 SDK了,而且还封装得不错,就是权限要得比较多。

今天需要做的是 跟 Path APP 一样,在自己的 APP 发布post时,同步发送到 其他平台Facebook。

先把基本配置做了

开始分享

建立内容模板

模板有几种方式

  • Link
  • Photos
  • Videos
  • Multimedia

参见Facebook官方文档

最终使用

ShareApi.share(content, null);

即可发送成功

但是发送的样式 跟 使用那些 一键分享的 SDK 是一样的

都是那种感觉像 转发 的形式。(会看到 发送的对话框,类似于 ShareDialog)

后台发送

仔细看了文档,发现了一个 Graph API

而且还提供了 案例,也有各个平台的SDK使用,用起来很方便。

Are two people Facebook friends? (判断两人是否为朋友)
Publishing new Status Updates (发布新的近况)

等等……具体参见文档

权限申请

根据需求写了一个方法,用于发布 文字近况 和 图片近况

public static void share2FBInBackground(String img_url, String des) {
        if(TextUtils.isEmpty(img_url)) {
            if(!TextUtils.isEmpty(des)) {
                Bundle params = new Bundle();
                params.putString("message", des);
                /* make the API call */
                new GraphRequest(
                        AccessToken.getCurrentAccessToken(),
                        "/me/feed",
                        params,
                        HttpMethod.POST,
                        new GraphRequest.Callback() {
                            public void onCompleted(GraphResponse response) {
                                DebugUtils.LOG_D(TAG, "post text complete");
                                /* handle the result */
                            }
                        }
                ).executeAsync();
            }

        } else {
            Bundle params = new Bundle();
            params.putString("url", img_url);
            if(!TextUtils.isEmpty(des)) {
                params.putString("caption", des);
            }
            /* make the API call */
            new GraphRequest(
                    AccessToken.getCurrentAccessToken(),
                    "/me/photos",
                    params,
                    HttpMethod.POST,
                    new GraphRequest.Callback() {
                        public void onCompleted(GraphResponse response) {
                        /* handle the result */
                            DebugUtils.LOG_D(TAG, "post photos complete");
                        }
                    }
            ).executeAsync();
        }
    }

可是

每次都不成功!

原来 Facebook 发布还需要权限,还需要申请(publish_actions)

那就在 发布之前 加一个 判断吧

是否有权限发布

public static boolean hasPublishPermission() {
    AccessToken accessToken = AccessToken.getCurrentAccessToken();
    return accessToken != null && accessToken.getPermissions().contains("publish_actions");
}

那,怎么申请权限呢?

public static void loginWithPublishPermission(Activity activity, final          FacebookCallback<LoginResult> callback) {
        // 允许使用的权限
        String permission[] = new String[]{"publish_actions"};
        LoginManager.getInstance().logInWithPublishPermissions(activity, Arrays.asList(permission));
        LoginManager.getInstance().registerCallback(mCallbackManager, callback);
    }

做了做些操作,应该可以发布成功了。

但是, publish_actions 这个权限是需要申请并审核的。

那就去申请好了。

进入 开发者账号–选中应用–选择 App-Review –选择 Submit Items for Approval–添加 需要的权限

然后 Edit Notes 看下 审核需要做哪些事情。

可严格了

  • My app does not auto-populate the user message field
  • My app does not use the Facebook Feed Dialog or the Facebook Share Dialog to publish content
  • The share button has clear Facebook branding
  • My app does not post to Facebook automatically

还要录制一个视频

You must show:

  1. How a person starts your app and logs in to Facebook login
  2. How a person shares to Facebook from your app
  3. How the post looks on the person’s Facebook timeline after posting

比写代码还麻烦。

还有一个问题,我想测试我写的代码是否能发布出去呢,现在权限还没有申请下来。

没关系,facebook 提供了一个 测试账号(需要自己添加)

左侧边栏–Roles–Test Users

然后使用新增的用户,用刚才的代码,就可以进行发布测试了。

流水帐式记录。Done.