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.

 
comments powered by Disqus