开发指南(海外)
第三方平台分享文档参考
设置分享回调
- iOS
- Android
提示
- Twitter 分享在 iOS 上必须经过授权才可使用分享,且分享过程不会和 Twitter 客户端有任何交互。
- Facebook 没有客户端时只能分享链接。
- LINE 必须使用客户端才可分享,直接调用客户端分享,所以无法获取准确回调,点击调用 LINE 就默认分享成功;
XDGShareResultHandler handler = ^(NSError *_Nullable error, BOOL cancel) {
if (cancel) {
// 分享取消
} else if (error) {
// 分享失败
} else {
// 分享成功
}
};
提示
- Twitter 分享比较特殊,对于未进行 OAuth 授权的分享不能进行贴文分享,只能跳转私信分享页,因此在未授权的分享,回调不准确;
- LINE 必须使用客户端才可分享,直接调用系统客户端分享,所以无法获取准确回调,点击调用 LINE 就默认分享成功;
- LINE 支持分享文本或图片,但两者不能同时分享。
private XDGShareCallback shareCallback = new XDGShareCallback() {
@Override
public void shareSuccess() {
// 分享成功
}
@Override
public void shareCancel() {
// 分享取消
}
@Override
public void shareFailed(String error) {
// 分享失败
}
};
分享平台类型说明
- iOS
- Android
typedef NS_ENUM(NSInteger, XDGShareType) {
XDGShareTypeFacebook = 0,
XDGShareTypeLine,
XDGShareTypeTwitter,
};
public interface XDGShareType {
int FACEBOOK = 0;
int LINE = 1;
int TWITTER = 2;
@Retention(RetentionPolicy.SOURCE)
@IntDef({FACEBOOK, LINE, TWITTER})
@interface Type {
}
}
分享至 Facebook 平台,如果应用在 FB 开发者平台处于 开发中
的状态时,测试 FB 分享时需要在 FB 开发者平台创建 模拟用户账号
,使用模拟用户账号登录 FB 客户端进行测试。可以前往 FB 开发者平台,应用身份
> 测试用户
创建测试用户。
分享平台是否安装
- iOS
- Android
[XDGShare isTargetInstalled:XDGShareTypeFacebook];
XDGShare.isTargetInstalled(context, XDGShareType.FACEBOOK);
分享链接
- iOS
- Android
[XDGShare shareWithType:XDGShareTypeFacebook
url:@"https://www.taptap.io"
completeHandler:handler];
XDGShare.share(this, XDGShareType.FACEBOOK, "https://www.taptap.io", shareCallback);
分享链接+文本内容
- iOS
- Android
[XDGShare shareWithType:XDGShareTypeFacebook
url:@"https://www.taptap.io"
message:@"分享内容"
completeHandler:handler];
XDGShare.share(this, XDGShareType.FACEBOOK, "https://www.taptap.io", "我是分享文案", shareCallback);
分享图片
- iOS
- Android
UIImage *shareImage = xxx;
[XDGShare shareWithType:XDGShareTypeFacebook
image:shareImage
completeHandler:handler];
因 Android 平台的差异化,图片类型分享针对不同的第三方平台有不同的实现方式:
分享 Uri 类型图片
分享系统相册选择返回的 Uri
示例代码参考:
private Uri selectedImageUri = null;
/**
* 打开系统相册
*/
private void openGallery() {
Intent intent = new Intent();
intent.setAction(Intent.ACTION_PICK);
intent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, "image/*");
startActivityForResult(intent, REQUEST_CODE_CHOOSE_PICTURE);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data){
super.onActivityResult(requestCode,resultCode,data);
if (requestCode == REQUEST_CODE_CHOOSE_PICTURE) {
if (null != data) {
selectedImageUri = data.getData();
}
}
}
Facebook
XDGShare.share(MainActivity.this, XDGShareType.FACEBOOK, selectedImageUri, shareCallback);
Twitter
XDGShare.share(MainActivity.this, XDGShareType.TWITTER, selectedImageUri, shareCallback);
LINE
XDGShare.share(MainActivity.this, XDGShareType.LINE, selectedImageUri, shareCallback);
分享应用外部存储绝对路径图片
文件路径示例:/storage/emulated/0/Android/data/{your_package_name}/files/Pictures/AndroidShare/share_test_img.png
获取图片文件示例参考:
File externalFileDir = getExternalFilesDir(Environment.DIRECTORY_PICTURES);
if (externalFileDir != null) {
File = new File(externalFileDir.getAbsolutePath() + File.separator + "AndroidShare", "share_test_img.png");
}
Facebook
XDGShare.share(MainActivity.this, XDGShareType.FACEBOOK, Uri.parse(shareImageFile.getAbsolutePath()), shareCallback);
Twitter
XDGShare.share(MainActivity.this, XDGShareType.TWITTER, Uri.parse(shareImageFile.getAbsolutePath()), shareCallback);
LINE
不支持(LINE 是通过 scheme 跳转形式进行分享,Android 系统做了应用隔离不能直接获取到应用外部存储绝对路径图片)
分享系统相册绝对路径图片
文件路径示例:/storage/emulated/0/DCIM/Screenshots/share_test_img.png
Facebook
XDGShare.share(MainActivity.this, XDGShareType.FACEBOOK, Uri.parse(filePath), shareCallback);
Twitter
XDGShare.share(MainActivity.this, XDGShareType.TWITTER, Uri.parse(filePath), shareCallback);
LINE
XDGShare.share(MainActivity.this, XDGShareType.TWITTER, Uri.parse(filePath), shareCallback);