1. 分享(选接)
分享功能支持分享文本、链接、图片等媒体文件,分享类型详见ShareType,目前支持以下几种类型:
- SFShareContent.ShareType.TEXT:文本
- SFShareContent.ShareType.IMAGE:图片
- SFShareContent.ShareType.AUDIO:音频
- SFShareContent.ShareType.VIDEO:视频
- SFShareContent.ShareType.FILE:文件
游戏在游戏内需要调用 Android 系统原生分享功能时,可以调用该方法,该功能不能明确知道用户分享结果。代码示例如下:
SFShareContent shareContent = new SFShareContent.Builder()
.setShareTitle(title)
.setShareContent(content)
.setShareUrl(url)
.setShareType(SFShareContent.ShareType.TEXT)
.build();
SFPlatform.getInstance().shareNative(activity, shareContent, new SFRequestListener() {
@Override
public void onSuccess() {
}
@Override
public void onFailed(int code, String message) {
}
});
SFShareContent 数据结构如下:
| 参数名称 | 参数类型 | 是否可为空 | 说明 |
|---|---|---|---|
| shareTitle | String | 是 | 分享的标题 |
| shareContent | String | 是 | 分享的内容 |
| shareUrl | String | 是 | 分享的链接 |
| shareUris | List | 是 | 分享的图片等媒体文件的 Uri 集合 |
| shareType | String | 否 | 分享的类型,详见 ShareType |
| sharePlatform | String | 否 | 分享的平台,详见 SharePlatform |
| pageId | String | 是 | Facebook 分享关联的页面 ID |
| placeId | String | 是 | Facebook 分享标记的地点 ID |
| shareHashtag | String | 是 | Facebook 分享的话题标签 |
sharePlatform 可以通过 SharePlatform 类指定:
- SFShareContent.SharePlatform.Facebook:分享到 Facebook,仅支持链接、图片和视频分享
- SFShareContent.SharePlatform.Instagram:分享到 Instagram
- SFShareContent.SharePlatform.LINE:分享到 LINE
- SFShareContent.SharePlatform.KakaoTalk:分享到 KakaoTalk
1.2 邀请码分享案例
分享链接:http://share.ludolandgame.com/ludoland.html 输入好友邀请码领取福利: 123456
被邀请人打开网页,先尝试打开手机端 APP,若 APP 未安装,则判断手机平台,若是 iPhone 则跳转 App Store,否则跳转 Google play 商店。
2. 评分(选接)
2.1 自定义评分
游戏在游戏内需要引导用户进行自定义弹窗评分时,可以调用该方法,该功能不能直接将评分数据展示在 Google Play,当用户的评分大于阈值时会跳转到 Google Play 的应用详情页面。该方法不提供 UI,需要游戏自定义 UI,用户完成评分后将分值和评论内容传入该方法:
SFPlatform.getInstance().launchGameCustomReview(score, comment, listener);
2.2 Google Play 评分
游戏在游戏内需要引导用户进行评分提交 Google Play 商店的评分和评价时,可以调用该方法:
SFPlatform.getInstance().launchInAppReview(activity, listener);
为了提供优质用户体验,Google Play 会强制执行一个限时配额,用于规定系统向用户显示评价对话框的频率。由于存在此配额,在短时间内(例如,不到一个月内)多次调用该方法时可能不会始终显示对话框。
3. 反馈(选接)
游戏在游戏内需要引导用户进行反馈(比如评分低于5分、反馈Bug、卸载挽留)时,可以调用该方法:
SFPlatform.getInstance().submitFeedback(feedbackType, stars, content, new SFRequestResultListener<Void>() {
@Override
public void onSuccess(Void data) {
}
@Override
public void onFailed(int code, String message) {
}
});
feedbackType:用户反馈类型,可以通过FeedbackType类指定:- FeedbackType.InGame:在游戏中反馈
- FeedbackType.Rating:在评分时反馈
- FeedbackType.Uninstall:在卸载挽留时反馈
- FeedbackType.Shortcuts:在打开快捷方式时反馈
stars:用户评分(数值),feedbackType传FeedbackType.Rating时需要传入content:用户反馈内容
4. 预注册(选接)
[!WARNING] 预注册功能仅限在
Google play商店上架的游戏接入。
4.1 接入必读
玩家第一次进入游戏后就调用当前接口,并把数据存储到游戏服上。给玩家标记预注册来源,发放奖励可以到后续流程的环节异步触发
4.2 方法说明
预注册的用户在游戏内领取预注册奖励,可以调用该方法。只有成功领取预注册奖励时会将预注册订单信息返回给游戏,游戏端负责给用户发放奖励。代码示例如下:
SFPlatform.getInstance().preRegistration(activity, new SFRequestResultListener<String>() {
@Override
public void onSuccess(String data) {
// data 为 Json 格式的预注册订单信息,只有成功领取预注册奖励时才有值
}
@Override
public void onFailed(int code, String message) {
}
});
4.3 Demo 案例

4.4 测试方案
- 测试账号可以通过重复操作点击预注册,取消预注册,来重复获取预注册订单,方便测试同账号不同设备不同场景下是否存在问题
- 埋点
sdk_pre_registration:预注册,会记录当前 uid 和预注册订单数据
4.5 预注册用户数据分析
用埋点的数据进行数据分析,减少网络环境带来的数据误差
5. 退款警告(选接)
在游戏内需要检查用户是否有退款行为时,可以调用该方法。如果查询到用户有退款行为时,会直接弹出退款警告弹出,或者将退款信息返回给游戏,游戏端负责给展示退款警告信息。退款警告支持有界面和无界面两种方式:
退款警告(有界面)
SFPlatform.getInstance().checkRefund(activity);退款警告(无界面)
SFPlatform.getInstance().checkRefund(activity, new SFResultListener<SFRefund>() { @Override public void onResult(SFRefund result) { // 游戏接收到退款信息时,需要向用户展示退款警告信息 } });
SFRefund 数据结构如下:
| 参数名称 | 参数类型 | 是否可为空 | 说明 |
|---|---|---|---|
| amount | Double | 否 | 累计退款金额 |
| message | String | 是 | 退款警告提示语 |
6. 文本翻译(选接)
在游戏内需要将文本翻译为指定语言时,可以调用该方法,传入需要翻译的文本和目标语言,会返回翻译后的结果。代码示例如下:
SFPlatform.getInstance().translate(text, targetLanguage, new SFRequestResultListener<SFTranslateText>() {
@Override
public void onSuccess(SFTranslateText data) {
// 翻译成功
String resultText = data.getResultText();
}
@Override
public void onFailed(int code, String message) {
// 翻译失败
}
}); // targetLanguage可传入en、en-US等格式
SFTranslateText 数据结构如下:
| 参数名称 | 参数类型 | 是否可为空 | 说明 |
|---|---|---|---|
| originalText | String | 否 | 原始文本 |
| resultText | String | 否 | 翻译后的文本 |
| targetLanguageCode | String | 否 | 目标语言编码 |
7. 敏感词校验(选接)
在游戏内需要校验文本是否包含敏感词时,可以调用该方法,传入需要校验的文本,会返回屏蔽敏感词的文本和状态码。代码示例如下:
SFPlatform.getInstance().checkSensitiveWords(text, new SFRequestResultListener<SFSensitiveWords>() {
@Override
public void onSuccess(SFSensitiveWords data) {
// 校验成功
String resultText = data.getResultText();
}
@Override
public void onFailed(int code, String message) {
// 校验失败
}
});
SFSensitiveWords 数据结构如下:
| 参数名称 | 参数类型 | 是否可为空 | 说明 |
|---|---|---|---|
| status | Int | 否 | 状态码(0-正常;1-包含敏感词) |
| originalText | String | 否 | 原始文本 |
| resultText | String | 否 | 屏蔽敏感词的文本 |
8. 启动画面
游戏需要在启动时显示启动画面的,可以通过以下方法实现,目前支持SOHI、SOFISH和自定义启动画面。SOHI和SOFISH启动画面支持深色模式(黑色背景浅色图标)和浅色模式(白色背景深色图标),自定义启动画面需要游戏传入启动图标和背景颜色。
8.1 SOHI启动画面
展示启动画面(需要手动关闭)
SFPlatform.getInstance().getUIService().showSplashScreenForSohi(activity, isDarkMode);展示启动画面(展示设置的时长后自动关闭)
SFPlatform.getInstance().getUIService().showSplashScreenForSohi(activity, isDarkMode, duration);
8.2 SOFISH启动画面
展示启动画面(需要手动关闭)
SFPlatform.getInstance().getUIService().showSplashScreenForSofish(activity, isDarkMode);展示启动画面(展示设置的时长后自动关闭)
SFPlatform.getInstance().getUIService().showSplashScreenForSofish(activity, isDarkMode, duration);
8.3 自定义启动画面
展示启动画面(需要手动关闭)
SFPlatform.getInstance().getUIService().showSplashScreen(activity, drawable, backgroundColor);展示启动画面(展示设置的时长后自动关闭)
SFPlatform.getInstance().getUIService().showSplashScreen(activity, drawable, backgroundColor, duration);
8.4 关闭启动画面
没有设置展示时长的启动画面需要游戏调用以下方法关闭启动画面:
SFPlatform.getInstance().getUIService().hideSplashScreen();
9. 请求应用更新
游戏需要检查是否有新版本时,可以通过以下方法请求版本更新内容,该功能集成了Google Play应用内更新功能(需要添加依赖项),代码示例如下:
SFPlatform.getInstance().requestAppUpdate(currentVersion, new SFAppUpdateListener() {
@Override
public void shouldShowAppUpdatePrompt(SFAppUpdateInfo appUpdateInfo) {
// 展示版本更新内容提示弹窗(强制更新时不允许关闭/取消弹窗)
boolean forceUpdate = appUpdateInfo.isForceUpdate();
// 如果是软更,用户选择跳过更新时应该通知SDK
appUpdateInfo.skipSoftUpdate();
}
@Override
public void shouldShowAppInstallPrompt(SFConsumer<Boolean> consumer) {
// 展示引导用户安装提示弹窗(应用内更新下载完成时引导用户安装)
consumer.accept(true); // 传入用户是否允许安装
}
@Override
public void noUpdateAvailable() {
// 没有可用更新
}
});
参数说明:
currentVersion:当前应用版本,支持versionCode和versionName,只能包含数字和点,如:10、1.2.0
SFAppUpdateInfo 数据结构如下:
| 参数名称 | 参数类型 | 是否可为空 | 说明 |
|---|---|---|---|
| enabled | boolean | 否 | 控制是否允许更新(全局开关) |
| title | String | 是 | 更新弹窗的标题(可自定义) |
| message | String | 是 | 更新弹窗的提示语 |
| storeUrl | String | 是 | 应用商店协议地址 |
| fallbackUrl | String | 是 | 备用下载地址(应用商店协议地址为空或无法打开时需打开备用下载地址) |
| latestVersion | String | 是 | 当前最新版本号(不配置则不触发软更) |
| minRequiredVersion | String | 是 | 最低兼容版本(当前版本低于此版本则触发强制更新) |
| forceUpdateVersions | Set<String> | 是 | 特定强制更新版本列表(即使版本号高于最低要求,只要在列表中,依然触发强制更新) |
enabled:控制是否允许更新(全局开关)title:更新弹窗的标题(可自定义)soft_message:软更的提示语(建议更新,可取消)hard_message:强更的提示语(强制更新,不可取消)store_url:应用商店协议地址fallback_url:备用下载地址latest_version:当前最新版本号(不配置则不触发软更)min_required_version:最低兼容版本(当前版本低于此版本则触发强制更新)force_update_versions:特定强制更新版本列表(即使版本号高于最低要求,只要在列表中,依然触发强制更新)
10. 其他接口(选接)
10.1 获取SDK版本号
SFPlatform.getInstance().getSdkVersion();
10.2 获取SDK设备 ID
SFPlatform.getInstance().getDeviceID();
10.3 打开网页
- 通过浏览器打开 Url
SFPlatform.getInstance().openBrowser(url);
10.4 判断游戏社区是否支持
该功能用于判断游戏社区是否支持,例如 Line、Discord、Facebook、Instagram、Twitter 等:
SFPlatform.getInstance().isCommunitySupported(communityType);
10.5 添加/移除网络状态改变监听
该功能用于监听设备网络状态改变:
// 添加网络状态改变监听
SFPlatform.getInstance().addNetworkStateListener(listener);
// 移除网络状态改变监听
SFPlatform.getInstance().removeNetworkStateListener(listener);
10.6 添加/移除玩家登录状态改变监听
该功能用于监听玩家登录状态改变:
// 添加玩家登录状态改变监听
SFPlatform.getInstance().addAuthenticationStatusListener(listener);
// 移除玩家登录状态改变监听
SFPlatform.getInstance().removeAuthenticationStatusListener(listener);
10.7 获取当前服务器时间
该功能用于获取当前服务器时间:
SFPlatform.getInstance().requestServerTime(new SFRequestResultListener<Long>() {
@Override
public void onSuccess(Long serverTime) {
}
@Override
public void onFailed(int code, String message) {
}
});
10.8 冷启动过程分析
该功能用于游戏冷启动过程分析:
SFPlatform.getInstance().trackAppLaunchState(appLaunchState);
appLaunchState 是指要游戏冷启动过程中的某个步骤,可以通过 SFAppLaunchState 类指定:
- SFAppLaunchState.CocosInit:Cocos游戏初始化开始
- SFAppLaunchState.CocosReady:Cocos游戏初始化完成
- SFAppLaunchState.UnityPlayerInit:Unity游戏初始化开始
- SFAppLaunchState.UnityPlayerReady:Unity游戏初始化完成
- SFAppLaunchState.LoadJNILibsStart:游戏动态链接库加载开始
- SFAppLaunchState.LoadJNILibsEnd:游戏动态链接库加载结束