一、配置
在 AndroidManifest.xml 中设置 ContentProvider,代码如下:
<provider android:authorities="com.facebook.app.FacebookContentProviderAPP_ID"
android:name="com.facebook.FacebookContentProvider"
android:exported="true" />
二、注册回调
private static FacebookCallback shareCallback = new FacebookCallback() {
@Override
public void onCancel() {
executeCallBack(1,"分享取消", null);
System.out.println("cocos2d-x------------------------------>SHARE CANCELED");
}
@Override
public void onError(FacebookException error) {
executeCallBack(1,"分享错误", null);
System.out.println("cocos2d-x------------------------------>SHARE ERROR");
}
@Override
public void onSuccess(Sharer.Result result) {
executeCallBack(0,"分享成功", null);
System.out.println("cocos2d-x------------------------------>SHARE SUCCEED");
}
};
ShareDialog shareDialog = new ShareDialog(m_mainActivity);
shareDialog.registerCallback(m_facebookCallbackManager, shareCallback);
三、内容建模
facebook支持分享链接、照片、视频、多媒体等等,在这里只介绍链接分享。用户通过应用将链接分享到 Facebook 时,会包括在帖子中显示的属性:
contentURL:要分享的链接
contentTitle:表示链接中的内容的标题
imageURL:将在帖子中显示的缩略图的网址
contentDescription:通常为 2-4 个句子
//分享链接
ShareLinkContent linkContent = new ShareLinkContent.Builder()
.setContentTitle(contentTitle)
.setContentDescription(contentDescription)
.setContentUrl(Uri.parse(contentUrl))
.setImageUrl(Uri.parse(imageUrl))
.build();
如果已安装facebook应用,分享时会打开分享对话框,分享对话框会切换到原生 Android 版 Facebook 应用,并在发布帖子后将控制权交还给应用;如果未安装facebook应用,会弹出网页对话框(前提是已获得发布权限),如果未获取到发布权限,需要在分享前向用户请求。
if (ShareDialog.canShow(ShareLinkContent.class)) {
shareDialog.show(linkContent);
} else if (hasPublishPermission()) {
ShareApi.share(linkContent, shareCallback);
} else {
LoginManager.getInstance().logInWithPublishPermissions(m_mainActivity, Arrays.asList("publish_actions"));
}
要发送应用邀请,必须使用 4.0 或以上版本的 Android 版 Facebook SDK。
一、创建应用链接
创建应用链接有一下两种方式:
1. facebook应用链接生成工具,生成应用链接
2. 标记
<html>
<head>
<meta property="al:ios:url" content="couchinapp://invite_from_fb?referral=123456789" />
<meta property="al:ios:app_store_id" content="123456789" />
<meta property="al:ios:app_name" content="Couchin'" />
<meta property="al:android:url" content="couchinapp://invite_from_fb?referral=123456789" />
<meta property="al:android:app_name" content="Couchin" />
<meta property="al:android:package" content="com.mycompany.couchin" />
<meta property="al:web:url" content="http://www.couchinapp.com/myapp.html" />
head>
<body>
Couchin App Link
body>
html>
二、应用链接建模
appLinkUrl (必选):接收人点击应用邀请页面的 install/play(安装/试玩)按钮时,所打开的应用链接。
previewImageUrl(可选):预览图片网址。
如果未设置 previewImageURL,邀请将使用应用设置中“应用详情”版块的“推广图片”。如果无可用图片,邀请将不能显示。
AppInviteContent content = new AppInviteContent.Builder()
.setApplinkUrl(applinkUrl)
.setPreviewImageUrl(imageUrl)
.build();
AppInviteDialog.show(m_mainActivity , content);
三、注册回调
private static FacebookCallback appInviteCallback =
new FacebookCallback() {
@Override
public void onSuccess(AppInviteDialog.Result result) {
executeCallBack(0,"邀请成功", null);
System.out.println("cocos2d-x------------------------->Invite succeed");
}
@Override
public void onCancel() {
executeCallBack(1,"邀请取消", null);
System.out.println("cocos2d-x------------------------->Invite cancel");
}
@Override
public void onError(FacebookException error) {
executeCallBack(1,"邀请错误", null);
System.out.println("cocos2d-x------------------------->Invite error" + String.format("Error: %s", error.toString()));
}
};
AppInviteDialog appInviteDialog = new AppInviteDialog(m_mainActivity);
appInviteDialog.registerCallback(m_facebookCallbackManager, appInviteCallback);
参考文档
游戏请求可用于吸引新玩家或重新吸引现有玩家。请求可在两种情况下发送:
一、 获取未授权好友列表
在登录成功后,向facebook请求获取未授权好友。
GraphRequest request = GraphRequest.newMeRequest(
accessToken,
new GraphRequest.GraphJSONObjectCallback() {
@Override
public void onCompleted(JSONObject object, GraphResponse response) {
// Insert your code here
}
});
Bundle parameters = new Bundle();
parameters.putString("fields", "invitable_friends");
request.setParameters(parameters);
request.executeAsync();
二、邀请口令
邀请口令是长度可变的唯一(按用户和按游戏区分)字符串,在每个好友对象中作为 id 字段的值返回。邀请口令会过期,并可能视游戏会话的不同而不同。
三、发送邀请
public static void sendGameRequestToFriend(String _content, String inviteTokenStr, String _sunmm, String _callidentifier) {
String[] inviteTokenStrs = inviteTokenStr.split(",");
List inviteTokens = Arrays.asList(inviteTokenStrs);
GameRequestDialog requestDialog = new GameRequestDialog(m_mainActivity);
requestDialog.registerCallback(m_facebookCallbackManager,
new FacebookCallback() {
public void onSuccess(GameRequestDialog.Result result) {
executeCallBack(0, "邀请成功", null);
}
public void onCancel() {
executeCallBack(1, "邀请取消", null);
}
public void onError(FacebookException error) {
executeCallBack(1, "邀请错误", null);
}
}
);
GameRequestContent content = new GameRequestContent.Builder()
.setMessage(_content)
.setRecipients(inviteTokens)
.build();
requestDialog.show(content);
}