开发指南
准备工作
接入前请确认您已经联系平台同事申请了需要的参数,并将其填写在 XDConfig.json 文件中。
对应平台的接入准备请参考 接入细节。
检查是否安装对应平台的 APP
- Android
- iOS
- Unity
// ShareActivity.java
import com.xd.sdk.sharing.XDGSharing;
import com.xd.sdk.sharing.base.SharePlatformType;
// ...
private void checkAppInstalled() {
boolean isInstalled = XDGSharing.isAppInstalled(ShareActivity.this, SharePlatformType.TapTap);
}
#import <XDGCommonSDK/XDGSharing.h>
if ([XDGSharing isAppInstalled:XDGSharePlatformTypeQQ]) {
// 已安装
} else {
// 未安装
}
using XD.SDK.Sharing;
bool isAppInstalled = XDGSharing.IsAppInstalled(XDGSharePlatformType.QQ);
开始分享
分享模块只有一个统一的接口,不同平台的差异在于传入不同类型的参数。
- Android
- iOS
- Unity
// ShareActivity.java
import com.xd.sdk.sharing.XDGSharing;
import com.xd.sdk.sharing.base.ISharePlatformParam;
import com.xd.sdk.sharing.callback.XDGShareCallback;
import org.jetbrains.annotations.NotNull;
// ...
private void share() {
ISharePlatformParam shareParam = null; // TODO,根据实际分享参数进行构造
XDGSharing.share(ShareActivity.this, shareParam, new XDGShareCallback() {
@Override
public void onSuccess() {
// 分享成功
}
@Override
public void onCancel() {
// 分享取消
}
@Override
public void onFailed(int code, @NotNull String message) {
// 分享失败
}
});
}
[XDGSharing shareWithParam:shareParam completionHandler:^(NSError * _Nullable error, BOOL cancel) {
if (cancel) {
// 取消
} else if (error) {
// 失败
} else {
// 成功
}
}];
using XD.SDK.Sharing;
XDGSharing.Share(shareParam, new XDGShareCallback {
OnSuccess = () => {},
OnFailed = (code, message) => {},
OnCancel = () => {}
});
QQ 分享
说明
- QQ 支持单张图片、单个视频、网页链接或者纯文本的分享,同时只能分享一种数据,SDK 会以图片 > 视频 > 链接 > 纯文本的优先顺序进行分享。
- QQ 聊天窗分享链接,当分享对象为我的电脑时,只会显示网页链接,不会展示卡片。
- iOS 平台上,QQ 分享的回调在成功拉起 QQ 应用时就触发成功的回调,没有拉起则返回失败。
- iOS 平台上,除了 videoId 以外的视频资源会以游戏的身份请求相册的权限保存在相册中以完成分享流程,且不会主动删除,需要用户自行操作。
- Android 平台上,QQ 聊天窗仅支持「图片分享」和「链接分享」;QQ 空间仅支持「链接分享」和「发表说说、视频、图片」,同时设置图片或视频时会自动过滤文字。
- 6.17.3 和 6.19.0 (不包含 6.18.0)开始支持设置分享链接的缩略图设置,图片大小请不要超过 64k。
示例代码
- Android
- iOS
- Unity
// ShareActivity.java
import com.xd.sdk.sharing.impl.qq.QQShareParam;
// ...
QQShareParam shareParam = QQShareParam.newBuilder()
.setSceneType(QQShareParam.QQScene.SESSION) // QQ 聊天窗
// .setSceneType(QQShareParam.QQScene.TIMELINE) // QQ 空间
.setContentText("我是分享文案")
.setImageUrl("我是分享本地图片绝对路径")
// .setImageData(imageData)
.setVideoUrl("我是分享本地视频绝对路径")
.setLinkUrl("我是分享链接")
.setLinkTitle("我是分享标题")
.setLinkSummary("我是分享描述")
.setLinkThumbUri("我是本地图片绝对路径链接缩略图")
// .setLinkThumbData(thumbData)
.build();
XDGQQShareParam *param = [XDGQQShareParam new];
param.sceneType = XDGShareSceneTypeSession; // 聊天窗口
// param.sceneType = XDGShareSceneTypeTimeline; // QQ 空间
param.contentText = @"纯文本内容";
param.linkUrl = @"网页链接"; // 分享链接时 Url 和 Title 必填,summary 可选
param.linkTitle = @"网页链接标题";
param.linkSummary = @"网页链接副标题";
param.linkThumbURI = @"图片在本地沙盒中的路径"; // v6.17.3 支持
// param.linkThumbData = thumbImageData; // 图片的 NSData 格式 v6.17.3 支持
param.videoId = @"视频在相册中的 assert local Identifier";
// param.videoUrl = @"视频在本地沙盒中的路径";
param.imageUrl = @"图片在本地沙盒中的路径";
// param.imageData = imageData; // 图片的 NSData 格式
using XD.SDK.Sharing.Impl.QQ;
XDGQQShareParam shareParam = new XDGQQShareParam {
SceneType = XDGQQShareParam.Session,
// SceneType = XDGQQShareParam.Timeline,
ContentText = "纯文本内容",
ImageUrl = "图片路径",
// ImageData = screenshotTex?.EncodeToPNG(),
LinkTitle = "网页链接标题",
LinkUrl = "网页链接",
LinkSummary = "网页链接副标题",
LinkThumbUri = "图片路径",
// LinkThumbData = thumbScreenshotTex?.EncodeToPNG(),
VideoUrl = "iOS 视频在相册中的 assert local Identifier;Android 本地视频绝对路径"
};
微信分享
说明
- 微信支持单张图片、网页链接或者纯文本的分享,同时只能分享一种数据,SDK 会以图片 > 链接 > 纯文本的优先顺序进行分享。
- iOS 平台上,如果用户在分享后选择留在游戏外或者手动切换回游戏,SDK 不会有分享回调。
- Android 平台上,用户在微信界面直接返回微信给到的是成功回调;分享过程中手动切回游戏 SDK 会给到「分享取消」的回调。
- 6.17.3 和 6.19.0 (不包含 6.18.0)开始支持设置分享链接的缩略图设置,图片大小请不要超过 64k。
示例代码
- Android
- iOS
- Unity
// ShareActivity.java
import com.xd.sdk.sharing.impl.wx.WeChatShareParam;
// ...
WeChatShareParam shareParam = WeChatShareParam.newBuilder()
.setSceneType(WeChatShareParam.WeChatScene.SESSION)
// .setSceneType(WeChatShareParam.WeChatScene.TIMELINE)
.setContentText("我是分享文案")
.setImageUrl("我是分享图片的本地绝对路径")
// .setImageData(imageData)
.setLinkUrl("我是分享链接")
.setLinkTitle("我是分享链接的标题")
.setLinkSummary("我是分享链接的描述")
.setLinkThumbUri("我是本地图片绝对路径链接缩略图")
// .setLinkThumbData(thumbData)
.build();
XDGWeChatShareParam *param = [XDGWeChatShareParam new];
param.sceneType = XDGShareSceneTypeSession; // 聊天窗口
// param.sceneType = XDGShareSceneTypeTimeline; // 朋友圈
param.contentText = @"纯文本内容";
param.linkUrl = @"网页链接"; // 分享链接时 Url 和 Title 必填,summary 可选
param.linkTitle = @"网页链接标题";
param.linkSummary = @"网页链接副标题"; // 在分享到朋友圈时不会显示
param.linkThumbURI = @"图片在本地沙盒中的路径"; // v6.17.3 支持
// param.linkThumbData = thumbImageData; // 图片的 NSData 格式 v6.17.3 支持
param.imageUrl = @"图片在本地沙盒中的路径";
// param.imageData = imageData; // 图片的 NSData 格式
using XD.SDK.Sharing.Impl.WeChat;
XDGWeChatShareParam shareParam = new XDGWeChatShareParam {
SceneType = XDGWeChatShareParam.Session,
// SceneType = XDGWeChatShareParam.Timeline,
ContentText = "纯文本内容",
ImageUrl = "图片路径",
// ImageData = screenshotTex?.EncodeToPNG(),
LinkTitle = "网页链接标题",
LinkUrl = "网页链接",
LinkSummary = "网页链接副标题",
LinkThumbUri = "图片路径",
// LinkThumbData = thumbScreenshotTex?.EncodeToPNG()
};
微博分享
说明
- 微博支持单张图片、单个视频和纯文本的分享,可以支持图片加文本或者视频加文本的分享,不能同时包含图片和视频。
- 微博正文内容支持话题标签,可附加在 ContentText 中,与抖音、小红书不同的是需要在标签前后添加 “#” 符号。
- iOS 平台上,如果用户在分享后选择留在游戏外或者手动切换回游戏,SDK 不会有分享回调。
- 6.20.0 开始支持设置超话参数,超话需要和微博官方申请开通,有需要请联系平台同事。
示例代码
- Android
- iOS
- Unity
// ShareActivity.java
import com.xd.sdk.sharing.impl.sina.WeiboShareParam;
// ...
WeiboShareParam shareParam = WeiboShareParam.newBuilder()
.setContentText("我是分享文案 #我是分享话题# #我是分享话题2# #Hashtag#")
.setImageUrl("我是分享图片的本地绝对路径")
// .setImageData(imageData)
.setVideoUrl("我是分享本地视频绝对路径")
.setSuperGroupName("超话名称")
.setSuperGroupSection("超话板块名称")
.setSuperGroupExtras("超话额外参数")
.build();
XDGWeiboShareParam *param = [XDGWeiboShareParam new];
param.contentText = @"我是分享文案 #我是分享话题# #我是分享话题2# #Hashtag#";
param.imageUrl = @"图片在本地沙盒中的路径";
// param.imageData = imageData; 图片的 NSData 格式
param.videoUrl = @"视频在本地沙盒中的路径";
param.superGroupName = @"超话名称"; // 需要带超话的话则必需
param.superGroupSection = @"超话板块名称"; // 可选
param.superGroupExtras = @"超话额外参数"; // 可选
using XD.SDK.Sharing.Impl.Weibo;
XDGWeiboShareParam shareParam = new XDGWeiboShareParam {
ContentText = "我是分享文案 #我是分享话题# #我是分享话题2# #Hashtag#",
ImageUrl = "图片路径",
// ImageData = screenshotTex?.EncodeToPNG(),
VideoUrl = "视频路径",
SuperGroupName = "超话名称",
SuperGroupSection = "超话板块名称",
SuperGroupExtras = "超话额外参数"
};
小红书分享
说明
- 小红书支持单张图片或者单个视频的分享,同时可以附带标题和正文内容。
- 小红书正文内容支持话题标签,可附加在 ContentText 中,使用 “#” 符号前缀,注意前后空格即可。
- iOS 平台上,成功跳到小红书 App 即认为分享成功,即使跳出后可能被拒绝分享。
示例代码
- Android
- iOS
- Unity
// ShareActivity.java
import com.xd.sdk.sharing.impl.xhs.XhsShareParam;
// ...
XhsShareParam shareParam = XhsShareParam.newBuilder()
.setTitle("我是分享标题")
.setContentText("我是分享文案 #我是分享话题 #我是分享话题2 #Hashtag")
.setImageUrl("我是分享图片的本地绝对路径")
// .setImageData(imageData)
.setVideoUrl("我是分享本地视频绝对路径")
.build();
XDGXHSShareParam *param = [XDGXHSShareParam new];
param.title = @"标题";
param.contentText = @"我是分享文案 #我是分享话题 #我是分享话题2 #Hashtag";
param.videoId = @"视频在相册中的 assert local Identifier";
// param.videoUrl = @"视频在本地沙盒中的路径";
param.imageUrl = @"图片在本地沙盒中的路径";
// param.imageData = imageData; 图片的 NSData 格式
using XD.SDK.Sharing.Impl.XHS;
XDGXHSShareParam shareParam = new XDGXHSShareParam {
ContentText = "我是分享文案 #我是分享话题 #我是分享话题2 #Hashtag",
ImageUrl = "图片路径",
// ImageData = screenshotTex?.EncodeToPNG(),
Title = "标题",
VideoUrl = "iOS 视频在相册中的 assert local Identifier;Android 本地视频绝对路径",
};
抖音分享
说明
- 抖音支持单张图片或者单个视频的分享,同时可以附带正文内容。
- 抖音正文内容支持话题标签,可附加在 ContentText 中,使用 “#” 符号前缀,注意前后空格即可。
- iOS 平台上,如果用户在分享后选择留在游戏外或者手动切换回游戏,SDK 不会有分享回调。
- iOS 平台上,除了 videoId 以外的图片和视频资源会以游戏的身份请求相册的权限保存在相册中以完成分享流程,且不会主动删除,需要用户自行操作。
示例代码
- Android
- iOS
- Unity
// ShareActivity.java
import com.xd.sdk.sharing.impl.douyin.DouYinShareParam;
// ...
DouYinShareParam shareParam = DouYinShareParam.newBuilder()
.setContentText("我是分享文案 #我是分享话题 #我是分享话题2 #Hashtag")
.setImageUrl("我是分享图片的本地绝对路径")
// .setImageData(imageData)
.setVideoUrl("我是分享本地视频绝对路径")
.build();
XDGDouYinShareParam *param = [XDGDouYinShareParam new];
param.contentText = @"我是分享文案 #我是分享话题 #我是分享话题2 #Hashtag";
param.videoId = @"视频在相册中的 assert local Identifier";
// param.videoUrl = @"视频在本地沙盒中的路径";
param.imageUrl = @"图片在本地沙盒中的路径";
// param.imageData = imageData; 图片的 NSData 格式
using XD.SDK.Sharing.Impl.DouYin;
XDGDouYinShareParam shareParam = new XDGDouYinShareParam {
ContentText = "我是分享文案 #我是分享话题 #我是分享话题2 #Hashtag",
ImageUrl = "图片路径",
// ImageData = screenshotTex?.EncodeToPNG(),
VideoUrl = "iOS 视频在相册中的 assert local Identifier;Android 本地视频绝对路径",
};
TapTap(国内版)分享
说明
- TapTap 支持单张图片或文本的分享,多个数据可以一起分享到 TapTap
- TapTap 分享支持绑定的游戏模块包括游戏ID、论坛标签ID、话题(普通话题、超话、hashtag)ID、内容&标题(可默认填写),关于前三者 ID 的具体内容请咨询平台同事。
- TapTap 在应用未安装无法拉起分享时会打开外部浏览器进入游戏详情页,打开的页面可以进行替换,有需要替换请咨询平台同事。
- iOS 平台上,分享实现依赖粘贴板内容,所以当系统询问是否允许从粘贴板复制内容,需要选择允许粘贴才能正常分享及回调
示例代码
- Android
- iOS
- Unity
// ShareActivity.java
import com.xd.sdk.sharing.impl.taptap.TapTapShareParam;
// ...
TapTapShareParam shareParam = TapTapShareParam.newBuilder()
.setTitle("我是分享标题")
.setContentText("我是分享文案 #我是分享话题 #我是分享话题2 #Hashtag")
.setImageUrl("我是分享图片的本地绝对路径")
// .setImageData(imageData)
.setVideoUrl("我是分享本地视频绝对路径")
.setAppId("Tap App Id")
.setGroupLabelId("Tap Group Label Id")
.setHashtagIds("Tap Hashtag Ids")
.setFailUrl("https://www.taptap.cn")
.build();
XDGTapTapShareParam *param = [XDGTapTapShareParam new];
param.groupLabelId = @"Tap group label Id"; // 可选
param.hashtagIds = @"Tap Hashtag Ids"; // 可选。可多个,以逗号分割,比如 1,2,3
param.title = @"我是分享标题"; // 可选
param.contentText = @"我是分享内容"; // 可选
param.imageUrl = @"图片在本地沙盒中的路径"; // 可选
// param.imageData = imageData; // 图片的 NSData 格式
param.linkUrl = @"https://www.taptap.cn"; // 可选
using XD.SDK.Sharing.Impl.TapTap;
XDGTapTapShareParam shareParam = new XDGTapTapShareParam() {
AppId = "Tap App Id",
GroupLabelId = "Tap group label Id",
HashtagIds = "Tap Hashtag Ids",
Title = "我是分享标题",
ContentText = "我是分享内容",
ImageUrl = "图片路径",
// ImageData = screenshotTex?.EncodeToPNG(),
FailUrl = "https://www.taptap.cn",
};
Facebook 分享
说明
- Facebook 支持单张图片、单个视频和网页链接的分享,同时只能分享一种数据,SDK 会以图片 > 视频 > 链接的优先顺序进行分享。
- iOS 平台上不支持视频的分享。
- iOS 平台上,如果用户在分享后选择留在游戏外或者手动切换回游戏,SDK 不会有分享回调。
示例代码
- Android
- iOS
- Unity
// ShareActivity.java
import com.xd.sdk.sharing.impl.facebook.FacebookShareParam;
// ...
FacebookShareParam shareParam = FacebookShareParam.newBuilder()
.setContentText("我是分享文案")
.setImageUrl("我是分享图片的本地绝对路径")
// .setImageData(imageData)
.setVideoUrl("我是分享本地视频绝对路径")
.setLinkUrl("我是分享链接")
.setLinkSummary("我是分享链接的描述")
.build();
XDGFacebookShareParam *param = [XDGFacebookShareParam new];
param.imageUrl = @"图片在本地沙盒中的路径";
// param.imageData = imageData; 图片的 NSData 格式
param.linkUrl = @"网页链接"; // 分享链接时 Url 必填,summary 可选
param.linkSummary = @"网页链接副标题";
using XD.SDK.Sharing.Impl.Facebook;
XDGFacebookShareParam shareParam = new XDGFacebookShareParam {
ContentText = contentInput.text,
ImageUrl = "图片路径",
// ImageData = screenshotTex?.EncodeToPNG(),
LinkUrl = "网页链接",
LinkSummary = "网页链接副标题",
VideoUrl = "Android 本地视频绝对路径"
};
Line 分享
说明
- Line 支持单张图片、网页链接和纯文本的分享,图片优先级大于链接,链接和纯文本同时存在时会被一起分享出去。
- iOS 平台上,Line 分享的回调在成功拉起 Line 应用时就触发成功的回调,没有拉起则返回失败。
- Android 平台上,Line 分享必须有客户端才能分享。
示例代码
- Android
- iOS
- Unity
// ShareActivity.java
import com.xd.sdk.sharing.impl.line.LineShareParam;
// ...
LineShareParam shareParam = LineShareParam.newBuilder()
.setContentText("我是分享文案")
.setImageUrl("我是分享图片的本地绝对路径")
// .setImageData(imageData)
.setLinkUrl("我是分享链接")
.build();
XDGLineShareParam *param = [XDGLineShareParam new];
param.contentText = @"纯文本内容";
param.imageUrl = @"图片在本地沙盒中的路径";
// param.imageData = imageData; 图片的 NSData 格式
param.linkUrl = @"网页链接";
using XD.SDK.Sharing.Impl.Line;
XDGLineShareParam shareParam = new XDGLineShareParam {
ContentText = "纯文本内容",
ImageUrl = "图片路径",
// ImageData = screenshotTex?.EncodeToPNG(),
LinkUrl = "网页链接",
};
TikTok 分享
说明
- TikTok 支持单张图片或者单个视频的分享。
- iOS 平台上,支持 TikTok 分享必须增加 Associated Domains 配置,请在和平台确定具体参数后自行配置,否则无法从 TikTok 跳回游戏。
- iOS 平台上,如果用户在分享后选择留在游戏外或者手动切换回游戏,SDK 不会有分享回调。
- iOS 平台上,除了 videoId 以外的图片和视频资源会以游戏的身份请求相册的权限保存在相册中以完成分享流程,且不会主动删除,需要用户自行操作。
示例代码
- Android
- iOS
- Unity
// ShareActivity.java
import com.xd.sdk.sharing.impl.tiktok.TikTokShareParam;
// ...
TikTokShareParam shareParam = TikTokShareParam.newBuilder()
.setImageUrl("我是分享图片的本地绝对路径")
// .setImageData(imageData)
.setVideoUrl("我是分享视频")
.build();
XDGTikTokShareParam *param = [XDGTikTokShareParam new];
param.imageUrl = @"图片在本地沙盒中的路径";
param.videoId = @"视频在相册中的 assert local Identifier";
// param.videoUrl = @"视频在本地沙盒中的路径";
// param.imageData = imageData; 图片的 NSData 格式
using XD.SDK.Sharing.Impl.TikTok;
XDGTikTokShareParam shareParam = new XDGTikTokShareParam(){
ContentText = "纯文本内容",
ImageUrl = "图片路径",
// ImageData = screenshotTex?.EncodeToPNG(),
VideoUrl = "视频路径",
};
Instagram 分享
说明
- Instagram 支持单张图片或者单个视频的分享。
- iOS Instagram 分享的回调在成功拉起 Instagram 应用时就触发成功的回调,没有拉起则返回失败。
- iOS 平台上,除了 videoId 以外的图片和视频资源会以游戏的身份请求相册的权限保存在相册中以完成分享流程,且不会主动删除,需要用户自行操作。
示例代码
- Android
- iOS
- Unity
// ShareActivity.java
import com.xd.sdk.sharing.impl.ins.InstagramShareParam;
// ...
InstagramShareParam shareParam = InstagramShareParam.newBuilder()
.setImageUrl("我是分享图片的本地绝对路径")
// .setImageData(imageData)
.setVideoUrl("我是分享视频")
.build();
XDGInstagramShareParam *param = [XDGInstagramShareParam new];
param.imageUrl = @"图片在本地沙盒中的路径";
param.videoId = @"视频在相册中的 assert local Identifier";
// param.videoUrl = @"视频在本地沙盒中的路径";
// param.imageData = imageData; 图片的 NSData 格式
using XD.SDK.Sharing.Impl.Instagram;
XDGInstagramShareParam shareParam = new XDGInstagramShareParam(){
ContentText = "纯文本内容",
ImageUrl = "图片路径",
// ImageData = screenshotTex?.EncodeToPNG(),
VideoUrl = "视频路径",
};
快手分享
说明
- 快手支持单张图片或者单个视频的分享。
- 支持快手和快手极速版。
- iOS 平台上,成功跳到快手 App 即认为分享成功,即使跳出后可能被快手拒绝分享。
示例代码
- Android
- iOS
- Unity
// ShareActivity.java
import com.xd.sdk.sharing.impl.kwai.KuaiShouShareParam;
// ...
KuaiShouShareParam shareParam = KuaiShouShareParam.newBuilder()
.setImageUrl("我是分享图片的本地绝对路径")
// .setImageData(imageData)
.setVideoUrl("我是分享视频")
.build();
XDGKuaiShouShareParam *param = [XDGKuaiShouShareParam new];
param.videoUrl = @"视频在本地沙盒中的路径";
param.imageUrl = @"图片在本地沙盒中的路径";
// param.imageData = imageData; 图片的 NSData 格式
using XD.SDK.Sharing.Impl.KuaiShou;
XDGKuaiShouShareParam shareParam = new XDGKuaiShouShareParam(){
ImageUrl = "图片路径",
// ImageData = 分享图片字节数组数据。与 imageUrl 二选一,
VideoUrl = "视频路径"
};