一般遇到的需求都是做分享操作,现在国内已经有很多一键分享的 SDK了,而且还封装得不错,就是权限要得比较多。
今天需要做的是 跟 Path APP 一样,在自己的 APP 发布post时,同步发送到 其他平台Facebook。
先把基本配置做了
- 將 Facebook Android SDK 新增至您的行動開發環境
- 取得正確設定並連結至 Android 應用程式的 Facebook 應用程式編號。請參閱 Android 新手指南,新增 Facebook 應用程式編號
- 產生 Android 金鑰雜湊並新增至開發人員個人檔案
- 新增 Facebook Activity - 請將本項目加至 `AndroidManifest.xml
开始分享
建立内容模板
模板有几种方式
- Link
- Photos
- Videos
- Multimedia
最终使用
ShareApi.share(content, null);
即可发送成功
但是发送的样式 跟 使用那些 一键分享的 SDK 是一样的
都是那种感觉像 转发 的形式。(会看到 发送的对话框,类似于 ShareDialog)
后台发送
仔细看了文档,发现了一个 Graph API
而且还提供了 案例,也有各个平台的SDK使用,用起来很方便。
Are two people Facebook friends? (判断两人是否为朋友)
/{user-a-id}/friends/{user-b-id}
- this API Read modifier will let you check via API.
Publishing new Status Updates (发布新的近况)
/{user-id}/albums
to create empty photo albums for people./{user-id}/photos
to add individual photos for people./{page-id}/albums
to create empty photo albums for Facebook Pages./{page-id}/photos
to add individual photos for Facebook Pages./{album-id}/photos
to add photos to an existing album for people or for Pages./{user-id}/videos
to update an user’s videos./{page-id}/videos
to update an page’s videos./{event-id}/videos
to update an event’s videos.
Sharing Links (分享链接)
/{user-id}/feed
for people on Facebook, using thelink
field./{page-id}/feed
for Facebook Pages, using thelink
field.
等等……具体参见文档
权限申请
根据需求写了一个方法,用于发布 文字近况 和 图片近况
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:
- How a person starts your app and logs in to Facebook login
- How a person shares to Facebook from your app
- How the post looks on the person’s Facebook timeline after posting
比写代码还麻烦。
还有一个问题,我想测试我写的代码是否能发布出去呢,现在权限还没有申请下来。
没关系,facebook 提供了一个 测试账号(需要自己添加)
左侧边栏–Roles–Test Users
然后使用新增的用户,用刚才的代码,就可以进行发布测试了。
流水帐式记录。Done.
comments powered by Disqus