跳到主要内容

开发指南(国内)

国内分享支持 QQ 、微信、微博等目标平台,其中 QQ 、微信支持分享到聊天窗及朋友圈(空间)。

各个目标平台分享时其对应平台客户端必须安装,否则会分享失败。

分享内容包括纯文本、纯图片、网页分享等。接口声明如下:

设置分享回调

// 当cancel为NO,error为nil时,表示分享成功
typedef void (^XDShareResultHandler)(NSError *_Nullable error, BOOL cancel);

当分享失败时,会返回对应错误码和错误描述,错误码对应如下:

错误码描述
-1 ( XDShareErrorCodeInvalidParams )传递的参数无效,包括字符串为空或 null,对应路径文件不存在等
-2 ( XDShareErrorCodeNotInit )该目标平台未初始化,请检查对应平台参数配置是否正常
-3 ( XDShareErrorCodeTargetNotInstalled )该目标平台未安装
-4 ( XDShareErrorCodeOther )其他错误,例如目标平台返回的其他异常

分享参数类型说明

typedef NS_ENUM(NSInteger, XDShareTarget) {
XDShareTargetWeChat = 0,
XDShareTargetQQ,
XDShareTargetWeibo,
};

typedef NS_ENUM(NSInteger, XDShareSceneType) {
XDShareSceneTypeSession = 0, // 聊天会话
XDShareSceneTypeTimeline, // 朋友圈、QQ空间等
};

/**
* WebPage 实体信息,
* 包括标题、摘要、缩略图、点击后跳转 URL
*/
@interface XDShareWebPage : NSObject

/// 标题,必选
@property (nonatomic, strong) NSString *title;
/// 摘要,可选
@property (nonatomic, strong, nullable) NSString *summary;
/// 缩略图路径,可选
@property (nonatomic, strong, nullable) NSString *thumbUri;
/// 跳转 URL。必选
@property (nonatomic, strong) NSString *url;

@end

分享

// 判断微信是否安装
[XDShare isTargetInstalled:XDShareTargetWeChat];

XDShareResultHandler ShareResultHandler = ^(NSError * _Nullable error, BOOL cancel) {
if (cancel) {
// 取消逻辑
} else if (error) {
// 分享失败逻辑
} else {
// 分享成功逻辑
}
};

// 分享文本到微信
[XDShare shareWithTarget:XDShareTargetWeChat sceneType:XDShareSceneTypeSession text:@"要分享的文案" completeHandler:ShareResultHandler];

// 分享图片到微信
[XDShare shareWithTarget:XDShareTargetWeChat sceneType:XDShareSceneTypeSession imageUri:@"这里填图片在本地的路径" completeHandler:ShareResultHandler];

// 分享网页到微信
XDShareWebPage *webPage = [[XDShareWebPage alloc] init];
webPage.title = @"标题";
webPage.summary = @"描述";
webPage.url = @"要分享的网页链接";
webPage.thumbUri = @"缩略图本地路径";
[XDShare shareWithTarget:XDShareTargetWeChat sceneType:XDShareSceneTypeSession text:@"test" completeHandler:ShareResultHandler];

项目工程配置

因 Android 11 及以上版本,系统存储结构发生变化,所以为了兼容对应系统设备,分享游戏目录内文件,游戏需添加以下配置。

1. 添加 filePath 文件配置

游戏在 Android 工程 res/xml 目录下新建 xdshare_filepath.xml 文件,内容如下:

<?xml version="1.0" encoding="utf-8"?>
<paths>
<external-files-path
name="share"
path="." />

<files-path
name="images"
path="."/>

<root-path
name="external_files"
path=""/>

</paths>

2. 清单文件添加声明

在应用 AndroidManifest.xml 文件中的 <application> 节点下添加如下声明:

<manifest xmlns:android="http://schemas.android.com/apk/res/android">
...
<application .... >
...
<provider
android:name="androidx.core.content.FileProvider"
android:authorities="${applicationId}.fileprovider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/xdshare_filepath" />
</provider>
</application>
</manifest>

其中 ${applicationId} 为游戏的包名