# 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
            {
            }
        });
1
2
3
4
5
6
7
8
9
10
11
12

# 5. 账号功能(必接)

# 5.1. 账号体系说明

  • 注册&登录原理

    1. 在游戏登录界面打开SDK注册&登录界面;

    2. 用户完成注册&登录之后,SDK会把用户id和ticket票据返回游戏;

    3. 游戏如果有服务器,需要把客户端获取到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
            {

            }
        }
        );
1
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 { }
        }
        );
1
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. 支付原理说明

  • 支付原理

    1. 游戏客户端发起支付请求;

    2. SDK服务器收到请求,并发送至第三方支付;

    3. 第三方支付成功收费以后通知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);
        }
    }
    );
1
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"]);
            }
    });
1
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);
1
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"]);
            }
        });
1
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"]);
        });
1
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"]);
            }        });
1
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) => { });
1
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": []
          }
      ]
  }
]
1
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);
        });
1
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"]);

        });
1
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);
      });
1
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);
       });
1
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);
       });
1
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);
       });
1
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: 取消成功");
1
2
3

# 9.4. 取消所有的通知

  • 接口声明

    • GCancelAllNotification(bool deleteAlarm, bool deleteNotification)
  • 参数说明

    • deleteAlarm: 是否删除后续通知(该字段为取消还未发送的通知)

    • deleteNotification: 是否删除已发通知(该字段为取消已经发送且到达通知栏的通知)

  • 代码示例:

GHomeManager.GetInstance().GCancelAllNotification(true, true);
       DemoUtil.ShowToastUI("code: " + 0 + ", msg: 取消成功");
1
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);
        });
1
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);
       }); 
1
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秒,否则重复不会生效,只会推送一次

    • yearmonthweekdaydayhourminutesecond 不要超过对应的最大值

  • 注意事项

/// 【注意】经过测试,发现苹果系统对于时间有以下要求: /// /// 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);
       }); 
1
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 支持 支持 支持 支持 不支持 支持 支持 不支持 支持 不支持

# ------------

Last Updated: 3/21/2024, 3:27:30 AM