开发指南
导入 SDK
"com.xd.sdk.announcement": "7.2.0"
准备工作
展示公告 UI
如果您希望使用 SDK 内置的公告 UI 进行展示,可以参考以下代码:
- Android
- iOS
- Unity
// AnnouncementActivity.java
import com.xd.sdk.announcement.XDGAnnouncement;
import com.xd.sdk.announcement.domain.model.AnnouncementConfig;
import com.xd.sdk.common.callback.WebActionCallback;
import com.xd.sdk.common.entities.WebActionType;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.Map;
// ...
private void openPage() {
AnnouncementConfig config = AnnouncementConfig.newBuilder()
.setServerCode("server_code") // 公告后台配置服务器后生成的代码
.setChannel("tap") // 渠道标识
.build();
XDGAnnouncement.openPage(AnnouncementActivity.this, config, new WebActionCallback() {
@Override
public void onAction(int type, @Nullable Map<@NotNull String, ?> data) {
if (type == WebActionType.CLOSE) {
// 页面关闭
} else if (type == WebActionType.MESSAGE) {
// 页面消息
if (data != null) {
Object value = data.get("key");
}
}
}
});
}
#import <XDCommonSDK/XDGAnnouncementManager.h>
XDGAnnouncementConfig *config = [XDGAnnouncementConfig new];
config.serverCode = @"1"; // 公告后台配置服务器后生成的代码
config.channel = @"ios"; // 渠道标识
[XDGAnnouncementManager openPageWithConfig:config handler:^(XDGWebAction actionType, NSDictionary * _Nullable data) {
if (actionType == XDGWebActionCloseWeb) {
// 页面关闭时回调
} else if (actionType == XDGWebActionMessage) {
// 页面消息回调
}
}];
using XD.SDK.Announcement;
XDGAnnouncementConfig config = new XDGAnnouncementConfig();
config.Channel = "渠道配置"; // 对应公告后台的 Google iOS PC 等
config.ServerCode = "服务器 code"; // 对应公告后台配置服务器时对应的 code
// 展示公告面板
XDGAnnouncementManager.OpenAnnouncementPage(config, (actionType, objects) =>
{
// objects 是透传数据,在各个事件中均可能携带
if (actionType == WebActionEnum.CLOSE)
{
// 关闭公告
} else if (actionType == WebActionEnum.MESSAGE)
{
// 透传数据
}
});
获取当前未读公告数据
当使用 SDK 内置公告 UI 时,您可以通过以下接口获取当前是否有未读的公告:
- Android
- iOS
- Unity
// AnnouncementActivity.java
import com.xd.sdk.announcement.XDGAnnouncement;
import com.xd.sdk.announcement.domain.model.AnnouncementConfig;
import com.xd.sdk.common.base.XDGError;
import com.xd.sdk.common.callback.Callback;
// ...
private void requestUnread() {
AnnouncementConfig config = AnnouncementConfig.newBuilder()
.setServerCode("server_code") // 公告后台配置服务器后生成的代码
.setChannel("tap") // 渠道标识
.build();
XDGAnnouncement.requestUnread(ADsActivity.this, config, new Callback<Boolean>() {
@Override
public void onCallback(Boolean aBoolean, XDGError xdgError) {
if (aBoolean) {
// 有未读公告
} else {
// 无未读公告
}
}
});
}
#import <XDCommonSDK/XDGAnnouncementManager.h>
XDGAnnouncementConfig *config = [XDGAnnouncementConfig new];
config.serverCode = @"1"; // 公告后台配置服务器后生成的代码
config.channel = @"ios"; // 渠道标识
[XDGAnnouncementManager requestUnreadWithConfig:config handler:^(_Bool hasRedDot) {
if (hasRedDot) {
// 有未读公告
} else {
// 无未读公告
}
}];
using XD.SDK.Announcement;
XDGAnnouncementConfig config = new XDGAnnouncementConfig();
config.Channel = "渠道配置"; // 对应公告后台的 Google iOS PC 等
config.ServerCode = "服务器 code"; // 对应公告后台配置服务器时对应的 code
XDGAnnouncementManager.RequestAnnouncementUnread(config, hasUnread =>
{
if (hasUnread)
{
// 有未读公告
}
else
{
// 没有未读公告
}
});
获取公告数据
如果您不想使用 SDK 内置的公告 UI,而是想自行实现公告展示界面,可以通过以下接口获取公告数据:
XDGAnnouncementManager.GetAnnouncements(announcements => {
StringBuilder sb = new StringBuilder();
foreach (XDGAnnouncement announcement in announcements) {
sb.AppendLine(JsonConvert.SerializeObject(announcement));
}
ResultText.text = sb.ToString();
}, err => {
ResultText.text = err.error_msg;
});
公告数据结构
public class XDGAnnouncement {
[JsonProperty("id")]
public long Id { get; set; }
[JsonProperty("type")]
public string Type { get; set; }
[JsonProperty("shortTitle")]
public string ShortTitle { get; set; }
[JsonProperty("longTitle")]
public string LongTitle { get; set; }
[JsonProperty("publishTime")]
public long PublishTime { get; set; }
[JsonProperty("expireTime")]
public long ExpireTime { get; set; }
[JsonProperty("image")]
public string Image { get; set; }
[JsonProperty("dimensions")]
public List<Dictionary<string, string>> Dimensions { get; set; }
[JsonProperty("content")]
public string Content { get; set; }
}