# GHOME 国际版SDK 开发手册 for Unity C#
# 1. 前言
本文用于指导游戏开发商接入GHome-Internatinal-Unity SDK,文中包含客户端的接入说明,以及服务器接口的介绍;
# 2. SDK接入流程概述
搭建SDK开发环境
初始化SDK
初始化成功,调用账号功能相关接口
用户在进行购买时,调用支付功能相关接口
接入登出接口
其他功能接口,可根据业务需要适时调用
# 3. 开发环境要求
# 3.1. 集成SDK文件到游戏工程
导入GHomeInternationalUnity_vXXX_XXX.unitypackage 包所有内容到游戏unity工程
(以下接入部分接入完成 可直接导出安卓包。 导出ios包的话则还是需要根据之前的移动端ios接入手册进行操作)
如果游戏需要打开GHome内的日志开关,可 通过手动修改 GConfig.debugOpen 的值来打开
# 3.2. 通过unity面板配置谷歌appid等安卓参数
点击菜单栏 CreateAsset - AddMetaA, 可看到在Assets生成了ManiMetaAsset/ManiConfig.asset 配置文件
拷贝游戏的启动图标并命名game_ic_launcher.png放到工程根目录下
打开ManiConfig.asset 在Inspector中 配置相应的参数,具体参数值有疑问的话可联系G家
填写完成点击
保存
按钮即可
# 3.3. 通过unity面板配置iOS三方参数
点击菜单栏 CreateAsset - AddiOSThirdConfig, 可看到在Assets生成了Editer/iOSThirdConfig.asset 配置文件
打开iOSThirdConfig.asset 在Inspector中 配置相应的参数,具体参数值有疑问的话可联系G家
填写完成点击
保存
按钮即可
# 3.4. iOS 内购和苹果登录的支持,打包Xcode脚本由于unity原因不能生效 需要在xcode工程中手动添加。
选中游戏target->Signing & Capabilities ->add Capability 添加In-App Purchase 和 Sign in with Apple
# 4. 基础功能(必接)
# 4.1. SDK初始化接口
游戏在初始场景调用,初始化接口返回成功方可调用后续的登录等功能接口
接口声明:
GInit(string appId, GHomeCallback gCallback);
参数说明:
appId: 游戏的appId
gCallback: 回调对象,用来回调执行结果,详情请参考代码事例。
注意事项:
请确保初始化接口成功之后再调用其他接口。
- 代码示例:
GHomeManager.GetInstance().GInit("791000008", (code, msg, data) =>
{
Debug.Log(msg);
if (code == 0)
{
isInit = true;
//...
}
else
{
}
});
2
3
4
5
6
7
8
9
10
11
12
# 5. 账号功能(必接)
# 5.1. 账号体系说明
注册&登录原理
在游戏登录界面打开SDK注册&登录界面;
用户完成注册&登录之后,SDK会把用户id和ticket票据返回游戏;
游戏如果有服务器,需要把客户端获取到ticket票据发送到“登录票据验证接口”进行验证,然后把返回的用户信息(用户id和账号)保存到游戏服务器;
# 5.2. 客户端登录
# 5.2.1 客户端登录接口
游戏客户端可以调用登录接口为玩家提供登录功能。若用户第一次登录,将显示登录和注册的界面。若用户上次使用账号成功登录过,则调用登录接口之后会用该账号自动登录。
接口声明:
GLogin(GHomeCallback gCallback)
参数说明:
gCallback: 回调对象,用来回调执行结果,详情请参考代码事例。
代码示例:
GHomeManager.GetInstance().GLogin((code, msg, dicData) => {
if (code == 0)
{
Debug.Log(msg + ", userid: " + dicData["userid"] + ", ticket: " + dicData["ticket"]);
//请求区数据
GetAreaInfo();
}
else if (code == GUnityConstants.ERROR_CODE_LOGIN_CANCEL)
{
}
else
{
}
}
);
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 5.2.2 客户端游客绑定接口
游戏客户端可以调用游客绑定接口为玩家提供游客绑定功能。
接口声明
GShowBind(GHomeCallback gCallback)
参数说明
gCallback: 回调对象,用来回调执行结果,详情请参考代码事例。
代码示例:
GHomeManager.GetInstance().GShowBind((code, msg, bindData) => { if (code == GHomeConstants.ERROR_CODE_SUCCESS) { GDebug.Log("绑定成功"); } else { GDebug.Log("绑定失败,code:" + code + ", msg:" + msg); } });
1
2
3
4
5
6
7
8
9
10
11
# 5.3. 客户端登出接口
游戏客户端可以在游戏内需要登出账号的地方调用该接口,执行成功将删除自动登录的记录信息,玩家下次登录后将不再自动登录,而是显示出登录界面。
接口声明:
GLogout(GHomeCallback gCallback)
参数说明:
gCallback: 回调对象,用来回调执行结果,详情请参考代码事例。
代码示例:
GHomeManager.GetInstance().GLogout((code, msg, data) =>{
if (code == 0)
{
//跳转去登录主页
SceneManager.LoadScene("LoginScene");
}
else { }
}
);
2
3
4
5
6
7
8
9
# 5.4. 客户端注销删除账号接口
游戏客户端可以在游戏内需要注销删除账号的地方调用该接口,执行成功将删除账号信息,并且会清除登录数据,注销完成需要回到登录之前的页面
接口声明:
GUnregister(GHomeCallback callback)
参数说明:
gCallback: 回调对象,用来回调执行结果,详情请参考代码事例。
代码示例:
public void ShowUnregister() { GHomeManager.GetInstance().GUnregister((code, msg, da) => { Debug.Log("ShowUnregister Callback : code = " + code + ", msg: " + msg); DemoUtil.ShowToastUI("code: " + code + ", msg: " + msg); }); }
1
2
3
4
5
6
7
8
# 6. 支付功能(必接)
# 6.1. 支付原理说明
支付原理
游戏客户端发起支付请求;
SDK服务器收到请求,并发送至第三方支付;
第三方支付成功收费以后通知SDK服务器,再由SDK服务器通知游戏服务器发货至游戏,需要游戏提供“订单通知接口”进行接收;
# 6.2. 客户端支付接口
游戏客户端可以在购买道具的地方调用该接口。这将打开支付界面,引导玩家支付该订单。用户结束支付操作后,SDK会回调游戏客户端,告知支付结果是否已经成功。
接口声明:
GPay(string orderId, string groupId, string areaId, string productId, int orderType, string extendInfo, GHomeCallback gCallback)
参数说明:
orderId: 游戏订单号。如果游戏需要记录订单号,可以传入唯一的字符串来标识此订单。
areaId: 在gpop平台上设置的区服的ID 区服ID不可为0
productId: 在gpop平台上设置的商品的ID
orderType: 正常支付订单传1(默认值),补缴支付订单传2
extendInfo: 扩展参数,游戏可用于自行扩展,平台发货通知时将原样返回给游戏服务器。
gCallback: 回调对象,用来回调执行结果,详情请参考代码事例。
注意事项:
由于可能发生网络延迟等等原因,有时候客户端返回的支付结果可能与实际情况有出入,所以最终订单是否支付成功,建议以平台服务器端的通知为准,客户端的通知结果仅作为参考。
代码示例:
GHomeManager.GetInstance().GPay(tempOrderId, areaId, productId, 1, "gamePayExtendInfosdfewre", (code,msg,dicData)=>
{
if (code == 0) {
//......
Debug.Log(msg);
} else {
Debug.Log(msg);
}
}
);
2
3
4
5
6
7
8
9
10
# 7. 扩展功能(可选)
# 7.1. 客户端获取游戏区服列表接口
游戏客户端可以调用该接口获取游戏在G家平台登记的区服配置。
接口声明:
GetGAreaConfigList(GHomeCallback gCallback)
参数说明:
gCallback: 回调对象,用来回调执行结果,详情请参考代码事例。
代码示例:
GHomeManager.GetInstance().GetGAreaConfigList((code,msg,data)=>
{
string messageData = areaData["data"];
Debug.Log("GHomeManager GetAreaConfigCallback code11111: " + code + ", data: " + areaData["data"]);
JObject messageData23 = JObject.Parse(messageData);
areaConfigData = JArray.Parse(messageData23["message"].ToString());
foreach (var areaInfo in areaConfigData)
{
Dropdown.OptionData temoData1 = new Dropdown.OptionData
{
text = areaInfo["name"].ToString()
};
mAreaDropdown.options.Add(temoData1);
Debug.Log("GHomeManager GetAreaConfigCallback 22222: " + ", areaCode: " + areaInfo["area_code"] + ", areaName: " + areaInfo["name"]);
}
});
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
区列表JSON格式说明:
"data":{ "message":[ { "area_code":"1", // 开发商后台配置的区服ID "name":"area1", // 开发商后台配置的区服名称 "notify_url":"http:\/\/test.hps.sdo.com\/mork\/notifygame" // 充值发货地址 }, ... ] }
1
2
3
4
5
6
7
8
9
10
# 7.2. 客户端设置区服信息接口
游戏客户端需要在选择了区服之后调用该接口上报一下区服信息
接口声明:
GLoginArea(string areaId, string groupId)
参数说明:
areaId: 区服id。 groupId: 组id。
代码示例:
//上报选择的区服信息
GHomeManager.GetInstance().GLoginArea(selectedAreaId, selectedGroupId);
2
# 7.3. 客户端获取游戏商品列表接口
游戏客户端可以调用该接口获取游戏在G家平台登记的商品配置。
接口声明:
GGetProductsInfo(GHomeCallback gCallback)
参数说明:
gCallback: 回调对象,用来回调执行结果,详情请参考代码事例。
代码示例:
GHomeManager.GetInstance().GetConfigProductsList((code, msg, da) =>
{
JObject sdf = JObject.Parse(da["data"].ToString());
JArray products = JArray.Parse(sdf["message"].ToString());
foreach (var prod in products)
{
Debug.Log("productsInfo: "
+ "item_name: " + prod["item_name"]
+ "\n money: " + prod["money"]
+ "\n product_code: " + prod["product_code"]
+ "\n type: " + prod["type"]);
}
});
2
3
4
5
6
7
8
9
10
11
12
13
product JSON格式说明:
"data":{ "message":[ { "item_name":"test1", // 商品名称 "money":"5" // 商品价格 "product_code":"test.id" // 商品id "type":1 // 商品类型 }, ... ] }
1
2
3
4
5
6
7
8
9
10
11
# 7.4. 客户端获取一次性票据接口
游戏客户端可以调用该接口获取用于游戏登录的一次性票据。
接口声明:
GGetTicket(string appId, string areaId, GHomeCallback gCallback)
参数说明:
appId: 游戏的appId。
areaId: 玩家所选区号。
gCallback: 回调对象,用来回调执行结果,详情请参考代码事例。
代码示例:
GHomeManager.GetInstance().GGetTicket("791000008", "23", (code, msg, dicData) => {
Debug.Log("ticket: " + dicData["ticket"]);
});
2
3
# 7.5. 客户端获取支付补缴列表接口
游戏客户端可以在登录完成后任意地方调用该接口。这将获取待缴订单的数据列表, 可对列表数据逐一调用支付接口进行补缴。
接口声明:
GQuerySupplemntOrder(GHomeCallback gCallback)
参数说明:
gCallback: 回调对象,用来回调执行结果,详情请参考代码事例。
代码示例:
GHomeManager.GetInstance().GQuerySupplemntOrder((code, msg, da) =>
{
Debug.Log("QuerySupplemntOrder Callback : supplementOrderList = " + da["supplementOrderList"]);
if (mSupOrderListData != null)
{
mSupOrderListData.Clear();
}
mOrderDropdown.ClearOptions();
Debug.Log("QuerySupplementOrder Callback : supplementOrderList = " + da["supplementOrderList"]);
mSupOrderListData = JArray.Parse(da["supplementOrderList"].ToString());
int i = 0;
foreach (var orderInfo in mSupOrderListData)
{
Dropdown.OptionData temoData1 = new Dropdown.OptionData
{
text = orderInfo["productId"].ToString()
};
mOrderDropdown.options.Add(temoData1);
if (i == 0)
{
mOrderDropdown.captionText.text = orderInfo["productId"].ToString();
i += 1;
}
Debug.Log("GHomeManager QuerySupplementOrder: "
+ ", payOrderNo: " + orderInfo["payOrderNo"]
+ ", gameOrderId: " + orderInfo["gameOrderId"]
+ ", areaId: " + orderInfo["areaId"]
+ ", appMid: " + orderInfo["appMid"]);
} });
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
product JSON格式说明:
supplementOrderList :[{ "payOrderNo": "MP010178040015230419190027000001", "gameOrderNo": "MS010178040012221122161456000001", "appMid": "10516778", "areaId": "1", "payChannelCode": "google", "productId": "test0000001" }, { "payOrderNo": "MP010178040015230419190027000001", "gameOrderNo": "MS010178040012221122161456000001", "appMid": "10516778", "areaId": "1", "payChannelCode": "google", "productId": "test0000001" }]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 7.6. 客户端获取多个商品信息(android是谷歌、iOS是苹果后台)
游戏客户端可以调用获取多个谷歌商品信息接口得到对应商品id在谷歌或者苹果后台中具体商品信息。
接口声明:
GGetProductsInfoWithIds(string[] productIds, int productType, GHomeCallback gCallback)
参数说明:
productIds: 要查询的商品ID列表。
productType: 默认查询传1查询 谷歌/苹果商品, 接入的onstore版 sdk则传2, 接入的mycard版本则传3
gCallback: 回调对象,用来回调执行结果,详情请参考代码事例。
代码示例:
string[] ids = { "test0000001", "test0000002" };
GHomeManager.GetInstance().GGetProductsInfoWithIds(ids, 1, (code, msg, data) => { });
2
- 返回商品信息 json
[
{
"zza": "{"productId":"test0000001","type":"inapp","title":"测试商品 (G家手游国际版Demo)","name":"测试商品","description":"用于功能测试","localizedIn":["zh-CN"],"skuDetailsToken":"AEuhp4LeDG-KRQRXgdRTsNFl9LRrtQdV6qZGFhpJ_Nhd9-Bw3gvpO3QKg6GlwYQ3WJ8=","oneTimePurchaseOfferDetails":{"priceAmountMicros":132060961,"priceCurrencyCode":"JPY","formattedPrice":"JP¥132"}}",
"zzb": {
"nameValuePairs": {
"description": "用于功能测试",
"localizedIn": {
"values": [
"zh-CN"
]
},
"name": "测试商品",
"oneTimePurchaseOfferDetails": {
"nameValuePairs": {
"formattedPrice": "JP¥132",
"priceAmountMicros": 132060961,
"priceCurrencyCode": "JPY"
}
},
"productId": "test0000001",
"skuDetailsToken": "AEuhp4LeDG-KRQRXgdRTsNFl9LRrtQdV6qZGFhpJ_Nhd9-Bw3gvpO3QKg6GlwYQ3WJ8=",
"title": "测试商品 (G家手游国际版Demo)",
"type": "inapp"
}
},
"zzc": "test0000001",
"zzd": "inapp",
"zze": "测试商品 (G家手游国际版Demo)",
"zzf": "测试商品",
"zzg": "用于功能测试",
"zzh": "AEuhp4LeDG-KRQRXgdRTsNFl9LRrtQdV6qZGFhpJ_Nhd9-Bw3gvpO3QKg6GlwYQ3WJ8=",
"zzi": "",
"zzk": [
{
"zza": "JP¥132",
"zzb": 132060961,
"zzc": "JPY",
"zzd": "",
"zze": "",
"zzf": []
}
]
},
{
"zza": "{"productId":"test0000002","type":"inapp","title":"测试商品2 (G家手游国际版Demo)","name":"测试商品2","description":"测试商品2","localizedIn":["zh-CN"],"skuDetailsToken":"AEuhp4I-Ok865UdB8oJeQQdhZQpILoWubzfNXrwzggABIxPDF59T77g2MsUzhM3sxa8=","oneTimePurchaseOfferDetails":{"priceAmountMicros":10564876,"priceCurrencyCode":"JPY","formattedPrice":"JP¥11"}}",
"zzb": {
"nameValuePairs": {
"description": "测试商品2",
"localizedIn": {
"values": [
"zh-CN"
]
},
"name": "测试商品2",
"oneTimePurchaseOfferDetails": {
"nameValuePairs": {
"formattedPrice": "JP¥11",
"priceAmountMicros": 10564876,
"priceCurrencyCode": "JPY"
}
},
"productId": "test0000002",
"skuDetailsToken": "AEuhp4I-Ok865UdB8oJeQQdhZQpILoWubzfNXrwzggABIxPDF59T77g2MsUzhM3sxa8=",
"title": "测试商品2 (G家手游国际版Demo)",
"type": "inapp"
}
},
"zzc": "test0000002",
"zzd": "inapp",
"zze": "测试商品2 (G家手游国际版Demo)",
"zzf": "测试商品2",
"zzg": "测试商品2",
"zzh": "AEuhp4I-Ok865UdB8oJeQQdhZQpILoWubzfNXrwzggABIxPDF59T77g2MsUzhM3sxa8=",
"zzi": "",
"zzk": [
{
"zza": "JP¥11",
"zzb": 10564876,
"zzc": "JPY",
"zzd": "",
"zze": "",
"zzf": []
}
]
}
]
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
# 7.7. 客户端扫码功能
游戏客户端可以调用该接口进行授权PC端登录。
接口声明:
GScanQRCode(GHomeCallback gCallback)
参数说明:
gCallback: 回调对象,用来回调执行结果,详情请参考代码事例。
代码示例:
GHomeManager.GetInstance().GScanQRCode((code, msg, da) =>
{
Debug.Log("GScanQRCode Callback : code = " + code + ", msg: " + msg);
DemoUtil.ShowToastUI("code: " + code + ", msg: " + msg);
});
2
3
4
5
# 7.8. 客户端获取设备信息接口
游戏客户端可以调用该接口获取设备信息。
接口声明:
GGetDeviceInfo(string appId, GHomeCallback gCallback)
参数说明:
appId: 游戏的appId。
gCallback: 回调对象,用来回调执行结果,详情请参考代码事例。
代码示例:
GHomeManager.GetInstance().GGetDeviceInfo("791000008", (code, msg, da) =>
{
Debug.Log("GGetDeviceInfo Callback : data = " + da["data"]);
DemoUtil.ShowToastUI(da["data"]);
});
2
3
4
5
6
# 8. 分享
# 8.1. 分享图片
接口声明
GShareImage(string channel, string imagePath, GHomeCallback callback)
参数说明
channel: 分享方式。传 GConfig内的SHARE_CHANNEL_XXX
imagePath: 分享的图片的路径
callback: 回调对象,用来回调执行结果,详情请参考代码事例。
代码示例:
GHomeManager.GetInstance().GShareImage(GConfig.SHARE_CHANNEL_MESSENGER, diData["picturePath"], (code, msg, diData) => { DemoUtil.ShowToastUI("code: " + code + ", msg: " + msg); });
1
2
3
4
# 8.2. 分享文字
分享文字。
接口声明
GShareText(string channel, string shareContent, GHomeCallback callback)
参数说明
channel: 分享方式。传 GConfig内的SHARE_CHANNEL_XXX
shareContent: 分享的文字内容
callback: 回调对象,用来回调执行结果,详情请参考代码事例。
代码示例:
GHomeManager.GetInstance().GShareText(GConfig.SHARE_CHANNEL_WHATSAPP, "一起玩游戏吧", (code, msg, diData) =>
{
DemoUtil.ShowToastUI("code: " + code + ", msg: " + msg);
});
2
3
4
# 8.3. 分享链接
接口声明
GShareUrl(string channel, string shareContent, string shareUrl, GHomeCallback callback)
参数说明
channel: 分享方式。传 GConfig内的SHARE_CHANNEL_XXX
shareContent: 内容
shareUrl: 链接
callback: 回调对象,用来回调执行结果,详情请参考代码事例。
代码示例:
GHomeManager.GetInstance().GShareUrl(GConfig.SHARE_CHANNEL_SYSTEM, "一起玩游戏吧", "https://www.baidu.com", (code, msg, diData) =>
{
DemoUtil.ShowToastUI("code: " + code + ", msg: " + msg);
});
2
3
4
# 9. 本地定时通知
# 9.1. 发送一个定时通知
接口声明
- GNotifyMsgFixedTime(int notificationId, string titleStr, string contentStr, string paramsStr, long timestamp, bool isRepeat, long intervalTime, int importanceType, GHomeCallback callback)
参数说明
notificationId: 该条通知的ID
titleStr: 通知标题
contentStr: 通知内容
paramsStr: 自定义参数。可传入之后在Android 的主activity内接收自定义消息解析处理
timestamp: 通知弹出的时间戳
isRepeat: 是否重复
intervalTime: 重复的间隔时间(毫秒)
importanceType:消息重要程度( 0.关闭通知, 1.开启通知,不弹出,无提示音,状态栏不显示, 2.开启通知,不弹出,无提示音,状态栏显示, 3.开启通知,不会弹出,发出提示音,状态栏显示, 4.开启通知,会弹出,发出提示音,状态栏显示)
callback: 回调对象,用来回调执行结果,详情请参考代码事例。
代码示例:
long currentMillis = (long)(DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc)).TotalMilliseconds;
string nextTime = textTimeMinutes.text.ToString();
int timeMinutes = int.Parse(nextTime);
Debug.Log("nextTime : " + nextTime + ", timeMinutes" + timeMinutes);
int notiId = int.Parse(textNotificationId.text.ToString());
string notiTitle = textTitle.text.ToString();
string notiContent = textContent.text.ToString();
GHomeManager.GetInstance().GNotifyMsgFixedTime(notiId, notiTitle, notiContent, "", currentMillis + timeMinutes * 60 * 1000, isRepeat, 120 * 1000, 4, (code, msg, dta) =>
{
DemoUtil.ShowToastUI("code: " + code + ", msg: " + msg);
});
2
3
4
5
6
7
8
9
10
11
12
13
14
# 9.2. 发送一组定时通知
接口声明
- GNotifyMsgIntervalTime(int notificationId, string titleStr, string contentStr, string paramsStr, long timestamp, bool isRepeat, long[] intervalTime, int importanceType, GHomeCallback callback)
参数说明
notificationId: 该条通知的ID
titleStr: 通知标题
contentStr: 通知内容
paramsStr: 自定义参数。可传入之后在Android 的主activity内接收自定义消息解析处理
timestamp: 需要通知弹出的时间戳
isRepeat: 是否重复
intervalTime: 一组间隔时间(毫秒)
importanceType:消息重要程度( 0.关闭通知, 1.开启通知,不弹出,无提示音,状态栏不显示, 2.开启通知,不弹出,无提示音,状态栏显示, 3.开启通知,不会弹出,发出提示音,状态栏显示, 4.开启通知,会弹出,发出提示音,状态栏显示)
callback: 回调对象,用来回调执行结果,详情请参考代码事例。
代码示例:
long currentMillis = (long)(DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc)).TotalMilliseconds;
string nextTime = textTimeMinutes.text.ToString();
int timeMinutes = 0;
if (nextTime != "")
{
timeMinutes = int.Parse(nextTime);
}
Debug.Log("nextTime : " + nextTime + ", timeMinutes22222 " + timeMinutes);
int notiId = int.Parse(textNotificationId.text.ToString());
string notiTitle = textTitle.text.ToString();
string notiContent = textContent.text.ToString();
var times = new List<long> { };
if (toggle5Minutes.isOn) { times.Add(5 * 60 * 1000); }
if (toggle10Minutes.isOn) { times.Add(10 * 60 * 1000); }
if (toggle15Minutes.isOn) { times.Add(15 * 60 * 1000); }
if (toggle20Minutes.isOn) { times.Add(20 * 60 * 1000); }
GHomeManager.GetInstance().GNotifyMsgIntervalTime(notiId, notiTitle, notiContent, "", currentMillis + timeMinutes * 60 * 1000, isRepeat, times.ToArray(), 4, (code, msg, dta) =>
{
DemoUtil.ShowToastUI("code: " + code + ", msg: " + msg);
});
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# 9.3. 取消一个通知
接口声明
- GCancelNotificationById(int notificationId, bool deleteAlarm, bool deleteNotification)
参数说明
notificationId: 该条通知的ID
deleteAlarm: 是否删除后续通知(该字段为取消还未发送的通知)
deleteNotification: 是否删除已发通知(该字段为取消已经发送且到达通知栏的通知)
- 代码示例:
int notiIdCancel = int.Parse(textNotificationId.text.ToString());
GHomeManager.GetInstance().GCancelNotificationById(notiIdCancel, true, false);
DemoUtil.ShowToastUI("code: " + 0 + ", msg: 取消成功");
2
3
# 9.4. 取消所有的通知
接口声明
- GCancelAllNotification(bool deleteAlarm, bool deleteNotification)
参数说明
deleteAlarm: 是否删除后续通知(该字段为取消还未发送的通知)
deleteNotification: 是否删除已发通知(该字段为取消已经发送且到达通知栏的通知)
代码示例:
GHomeManager.GetInstance().GCancelAllNotification(true, true);
DemoUtil.ShowToastUI("code: " + 0 + ", msg: 取消成功");
2
# 10. iOS本地推送
# 10.1. iOS 推送权限获取
接口声明
- public void GRegisterNotification(GHomeCallback registerCallback, GHomeCallback reviceCallback, GHomeCallback clickCallback)
参数说明
registerCallback 获取权限结果的回调
reviceCallback 前台收到推送消息回调
clickCallback 用户点击了推送消息回调
代码示例:
GHomeManager.GetInstance().GRegisterNotification((code, msg, dta) =>
{
DemoUtil.ShowToastUI("code: " + code + ", msg: " + msg);
}, (code, msg, dta) =>
{
DemoUtil.ShowToastUI("code: " + code + ", msg: " + msg);
}, (code, msg, dta) =>
{
DemoUtil.ShowToastUI("code: " + code + ", msg: " + msg);
});
2
3
4
5
6
7
8
9
10
# 10.2. iOS 本地添加一个延时推送
接口声明
- public void GAddLocalTimeIntervalNotification(JObject notificationInfo, GHomeCallback callback)
notificationInfo中key参数说明
noticeId: 推送id,必传,注意保持唯一性,不同的推送事件要用不同的id,相同的id会覆盖前一次的推送设置,可以在
UNUserNotificationCenterDelegate
回调中获取title: 标题
subtitle: 副标题
body: 内容 如果 title subtitle body 都传空,不会显示通知横幅
userInfo: 自定义消息内容
imageFilePath: 图片路径 注意:必须要是本地图片的路径
timeInterval: 时间,单位:秒,如果想要立马推送,传0即可,double类型
repeats: 是否重复推送。 如果需要重复推送,时间必须大于60秒,否则重复不会生效,只会推送一次
代码示例:
JObject notificationInfo = new JObject();
notificationInfo.Add("noticeId", textNotificationId.text.ToString());//通知id,若id为重复,默认为更新该id的通知
notificationInfo.Add("title", textTitle.text.ToString());
notificationInfo.Add("body", textContent.text.ToString());
//notificationInfo.Add("userInfo", userInfo);//选填, 则可以传入自定义参数,传入jsonstring
notificationInfo.Add("repeats", isRepeat);//是否重复推送 重复推送时间要大于60秒 否则无效
notificationInfo.Add("timeInterval", 0); //此处需要传入秒
//notificationInfo.Add("imageFilePath", imageFilePath);//选填 本地图片路径
notificationInfo.Add("subtitle", "这里是马上推送");//选填
GHomeManager.GetInstance().GAddLocalTimeIntervalNotification(notificationInfo, (code, msg, dta) =>
{
DemoUtil.ShowToastUI("code: " + code + ", msg: " + msg);
});
2
3
4
5
6
7
8
9
10
11
12
13
# 10.3. iOS 本地添加一个定时推送
接口声明
- public void GAddLocalCalendarNotification(JObject notificationInfo, GHomeCallback callback)
notificationInfo中key参数说明
noticeId: 推送id,必传,注意保持唯一性,不同的推送事件要用不同的id,相同的id会覆盖前一次的推送设置,可以在
UNUserNotificationCenterDelegate
回调中获取title: 标题
subtitle: 副标题
body: 内容 如果 title subtitle body 都传空,不会显示通知横幅
userInfo: 自定义消息内容
imageFilePath: 图片路径 注意:必须要是本地图片的路径
repeats: 是否重复推送。 如果需要重复推送,时间必须大于60秒,否则重复不会生效,只会推送一次
year、month、weekday、day、hour、minute、second 不要超过对应的最大值
注意事项
/// 【注意】经过测试,发现苹果系统对于时间有以下要求: /// /// 1、时间单位要保持连续性,比如:x年x月x日,如果设置为x年x日,推送设置可能会失败。 /// 2、注意时间是24小时制 /// 3、weekday 默认是从周日开始,1 ~ 7,对应周日 ~ 周六 /// 4、weekday不要和年、月、日同时设置 /// 5、如果不需要某个时间单位,不设置即可,不要设置为0,比如:0月6日6时0分,应该设置为 6日6时 /// /// eg: /// eg1:6月6号6点推送 /// NSDateComponents *components = [[NSDateComponents alloc] init]; /// components.month = 6 /// components.day = 6; /// components.hour = 6; /// /// eg2:周日6点推送 /// NSDateComponents *components = [[NSDateComponents alloc] init]; /// components.weekday = 1; /// components.hour = 6; /// /// - repeats: 是否重复。如果设置的时间是具体的时间,不会重复推送比如:2022年6月6号6点6分 /// /// x分 可每小时重复 /// x时x分 可每日重复 /// x日x时 可每月重复 /// x日x时x分 可每月重复 /// x月x日 可每年重复 /// x月x日x时 可每年重复 /// x月x日x时x分 可每年重复 /// 周x x时x分 可每周重复 /// 周x x时 可每周重复 /// /// 如果需要测试效果,可手动修改手机时间,触发重复推送逻辑
- 代码示例:
JObject notificationInfo = new JObject();
notificationInfo.Add("noticeId", textNotificationId.text.ToString());//通知id,若id为重复,默认为更新该id的通知
notificationInfo.Add("title", textTitle.text.ToString());
notificationInfo.Add("body", textContent.text.ToString());
JObject userInfo = new JObject();
userInfo.Add("nickName","传奇世界小人");
userInfo.Add("userId", "1034554");
notificationInfo.Add("userInfo", userInfo.ToString());//选填, 则可以传入自定义参数,传入jsonstring
//notificationInfo.Add("repeats", isRepeat);
//notificationInfo.Add("year", year);//选填
//notificationInfo.Add("month", month);//选填
//notificationInfo.Add("weekday", weekday);//选填
//notificationInfo.Add("day", day);//选填
//notificationInfo.Add("hour", hour);//选填
notificationInfo.Add("minute", @"10");//选填
//notificationInfo.Add("second", second);//选填
//notificationInfo.Add("imageFilePath", imageFilePath);//选填 本地图片路径
notificationInfo.Add("subtitle", "这里是每个小时的10分中推送");//选填
notificationInfo.Add("repeats", isRepeat);
GHomeManager.GetInstance().GAddLocalCalendarNotification(notificationInfo, (code, msg, dta) =>
{
DemoUtil.ShowToastUI("code: " + code + ", msg: " + msg);
});
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# 10.4. iOS 取消推送 同 9.3、9.4
# 11.常见错误问题解决
# 构建失败问题
gradle缺少AdnroidX属性
1. 勾选Project Setting -> Player -> Publishing Setting -> Build -> Custom Gradle Properties Template 2. 在Assets\Plugins\Android\gradleTemplate.properties 文件中增加以下配置: android.enableJetifier=true android.useAndroidX=true
1
2
3
4
# SDK结构说明
Editor 配置文件
ExternalDependencyManager 安卓自动引入依赖库工具包
Plugins/Android 安卓AndroidManifest.xml(包含谷歌、fb等的一些动态可配置项)
Plugins/iOS GHome IOS SDK 库
Scripts GHome unity sdk源码, (GHome C# 对外接口所在位置)
unityCalllib.androidlib GHome android sdk接口封装库
# 各api在各版本SDK内 各平台的支持情况
- GHomeInternationalUnity_vXXX_google
平台 | 初始化 | 登录 | 支付 | 登出 | 账号注销 | 账号绑定 | 获取已配置的区服列表 | 获取已配置的商品列表 | 查询补缴订单列表 | 根据商品ID查询商品信息 |
---|---|---|---|---|---|---|---|---|---|---|
IOS | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 |
Android | 支持 | 支持 | 支持 | 支持 | 不支持 | 支持 | 支持 | 支持 | 支持 | 支持 |
- GHomeInternationalUnity_vXXX_onestore
平台 | 初始化 | 登录 | 支付 | 登出 | 账号注销 | 账号绑定 | 获取已配置的区服列表 | 获取已配置的商品列表 | 查询补缴订单列表 | 根据商品ID查询商品信息 |
---|---|---|---|---|---|---|---|---|---|---|
IOS | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 |
Android | 支持 | 支持 | 支持 | 支持 | 不支持 | 支持 | 支持 | 支持 | 支持 | 支持 |
- GHomeInternationalUnity_vXXX_mycard
平台 | 初始化 | 登录 | 支付 | 登出 | 账号注销 | 账号绑定 | 获取已配置的区服列表 | 获取已配置的商品列表 | 查询补缴订单列表 | 根据商品ID查询商品信息 |
---|---|---|---|---|---|---|---|---|---|---|
IOS | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 |
Android | 支持 | 支持 | 支持 | 支持 | 不支持 | 支持 | 支持 | 不支持 | 支持 | 不支持 |
# ------------
← iOS Unity (PC) →