- 联系我们
- 技术支持: vrsupport@qiyi.com
- 商务合作: business@iqiyismart.com
- 人才招聘: 查看职位 >
- 公司地址:北京市朝阳区宏泰东街绿地中心B座11层
如果您需要使用任一平台功能,必须先按照以下内容初始化奇遇SDK:
/// <summary>
/// 初始化平台接口
/// </summary>
/// <param name="callback">回调函数</param>
/// <param name="app_id">APPID</param>
/// <param name="app_secret">开发者秘钥</param>
public static void InitQiyuSDK(RequestCallback callback, string app_id, string app_secret)
{
if (!QiyuPlatform.IsAndroid)
return;
QiyuXRPlatformPlugin.QVR_InitQiyuSDK(QiyuMessageManager.AddRequest(callback), app_id, app_secret);
}
参数说明:
app_id、app_secret:请您在登录奇遇开发者网站后,点击“管理 - 我的应用 - 新增”创建您的应用,系统将会给每个应用生成唯一app_id和app_secret。创建应用后,点击「API」查看App ID,App Secret信息
返回码
app初始化完毕后,开发者应该首先初始化sdk,来验证开发者身份,所有平台接口都需要身份验证成功后调用。msg.code的返回码如下:
监听码 | 原因 |
---|---|
S0000 | 成功 |
S9000 | 系统异常 |
S9001 | 参数为空 |
B3021 | 应用ID或秘钥错误 |
注:
Demo :
//Initialize SDK Just Once
QiyuXRPlatform.InitQiyuSDK(QiyuMessage.GetRequestResult<QiyuMessage.SDKInit>((msg) =>
{
if (msg.IsSuccess())
{
Debug.Log( $" InitQiyuSDK OK!");
}
else
{
Debug.Log( $" InitQiyuSDK Failed! code:{msg.code}");
}
}),
"", //AppId 从开发者后台的APP页面获取
""); //App秘钥 从开发者后台的APP页面获取
在应用程序中获取奇遇用户的帐户状态和信息。
public static bool IsQiyuAccountLogin()
{
if (!QiyuPlatform.IsAndroid)
return false;
return QiyuXRPlatformPlugin.QVR_IsAccountLogin() == 1;
}
/// <summary>
/// 获取Qiyu账户信息
/// </summary>
/// <param name="callback">请求的回调函数</param>
public static void GetQiyuAccountInfo(RequestCallback callback)
{
if (!QiyuPlatform.IsAndroid)
return;
QiyuXRPlatformPlugin.QVR_GetQiyuAccountInfo(QiyuMessageManager.AddRequest(callback));
}
获取奇遇账号信息Demo
QiyuXRPlatform.GetQiyuAccountInfo(QiyuMessage.GetRequestResult<QiyuMessage.QiyuAccountInfo>((msg) =>
{
if (msg.IsSuccess())
{
Debug.Log(string.Format( " GetQiyuAccountInfo uid is {0},name is {1}", msg.data.uid, msg.data.name));
}
}));
注:开发者在获取奇遇账号信息时,应先判断是否已经登录奇遇账号,只有登录成功后,才会获取到账户信息。
调用登录界面Demo(未登录获取账号信息失败时需要):
public void GetQiyuAccountInfo()
{
if (QiyuXRPlatform.IsQiyuAccountLogin())
{
QiyuXRPlatform.GetQiyuAccountInfo(QiyuMessage.GetRequestResult<QiyuMessage.QiyuAccountInfo>((msg) =>
{
if (msg.IsSuccess())
{
Debug.Log(string.Format(" GetQiyuAccountInfo uid is {0},name is {1}", msg.data.uid, msg.data.name));
}
}));
}
else
{
//跳转到Home进行登录
QiyuXRPlatform.LaunchHome("login", "");
}
}
奇遇后台提供了校验用户账号有效性的服务器接口,参见4.3 奇遇用户认证API指南 (opens new window)。
当您有两个独立的应用程序时:例如一个单人游戏和一个多人游戏。如果你想要在两个应用程序中实现应用程序深度链接,用户可以从单人应用程序加入多人游戏应用。 深度链接需要在发出请求的应用程序和目标应用程序中进行集成。接下来的部分将描述这两个应用程序所需的实现。
打开其他应用
/// <summary>
/// 打开其他应用
/// </summary>
/// <param name="app_id">应用id</param>
/// <param name="key">深度连接Key(注:Key参数为小写字母)</param>
/// <param name="value">深度连接value</param>
public static void LaunchOtherApp(string app_id, string key, string value)
{
if (!QiyuPlatform.IsAndroid)
return;
QiyuXRPlatformPlugin.QVR_LaunchOtherApp(app_id, key, value);
}
注:跳转请求发出后,如果目标应用未购买或者未安装,会跳转到奇遇商店-目标应用详情页
/// <summary>
/// 获取深度连接信息
/// </summary>
/// <param name="callback">回调函数</param>
public static void GetDeepLink(RequestCallback callback)
{
if (!QiyuPlatform.IsAndroid)
return;
QiyuXRPlatformPlugin.QVR_GetDeepLink(QiyuMessageManager.AddRequest(callback));
}
Demo:
QiyuXRPlatform.LaunchOtherApp("70519169", "show", "1");
QiyuXRPlatform.GetDeepLink(QiyuMessage.GetRequestResult<QiyuMessage.DeepLinkParam>(msg =>
{
if (msg.IsSuccess() && msg.data != null)
{
Debug.Log(string.Format( " OnGetDeepLink key is {0},value is {1}", msg.data.key, msg.data.value));
}
}));
QiyuXRPlatform.LaunchHome("store", app_id);
在奇遇商店上线的内容,需要存档用户数据,防止用户在版本升级、卸载重装后丢失已有数据和档案。如果您的应用需要存档用户数据,请使用SDK提供的QiyuPrefs类及方法,实现应用数据持久化功能。退出游戏前记得调用Save保存。
/// <param name="key">关键字</param>
/// <param name="defValue">默认值</param>
/// <returns>返回值</returns>
public static float GetFloat(string key, float defValue = 0)
{
if (QiyuPlatform.IsAndroid)
{
return QiyuXRPlatformPlugin.QVR_Prefs_GetFloat(key, defValue);
}
else
{
return PlayerPrefs.GetFloat(key, defValue);
}
}
/// <param name="key">关键字</param>
/// <param name="defValue">默认值</param>
/// <returns>返回值</returns>
public static int GetInt(string key, int defValue = 0)
{
if (QiyuPlatform.IsAndroid)
{
return QiyuXRPlatformPlugin.QVR_Prefs_GetInt(key, defValue);
}
else
{
return PlayerPrefs.GetInt(key, defValue);
}
}
/// <param name="key">关键字</param>
/// <param name="defValue">默认值</param>
/// <returns>返回值</returns>
public static string GetString(string key, string defValue = "")
{
if (QiyuPlatform.IsAndroid)
{
return QiyuXRPlatformPlugin.QVR_Prefs_GetString(key, defValue);
}
else
{
return PlayerPrefs.GetString(key, defValue);
}
}
/// <param name="key">关键字</param>
/// <param name="defValue">默认值</param>
public static void SetFloat(string key, float value)
{
if (QiyuPlatform.IsAndroid)
{
QiyuXRPlatformPlugin.QVR_Prefs_SetFloat(key, value);
}
else
{
PlayerPrefs.SetFloat(key, value);
}
}
/// <param name="key">关键字</param>
/// <param name="defValue">默认值</param>
public static void SetInt(string key, int value)
{
if (QiyuPlatform.IsAndroid)
{
QiyuXRPlatformPlugin.QVR_Prefs_SetInt(key, value);
}
else
{
PlayerPrefs.SetInt(key, value);
}
}
/// <param name="key">关键字</param>
/// <param name="defValue">默认值</param>
public static void SetString(string key, string value)
{
if (QiyuPlatform.IsAndroid)
{
QiyuXRPlatformPlugin.QVR_Prefs_SetString(key, value);
}
else
{
PlayerPrefs.SetString(key, value);
}
}
public static void DeleteAll()
{
if (QiyuPlatform.IsAndroid)
{
QiyuXRPlatformPlugin.QVR_Prefs_DeleteAll();
}
else
{
PlayerPrefs.DeleteAll();
}
}
/// <param name="key">关键字</param>
public static void DeleteKey(string key)
{
if (QiyuPlatform.IsAndroid)
{
QiyuXRPlatformPlugin.QVR_Prefs_DeleteKey(key);
}
else
{
PlayerPrefs.DeleteKey(key);
}
}
/// <param name="key">关键字</param>
public static bool HasKey(string key)
{
if (QiyuPlatform.IsAndroid)
{
return QiyuXRPlatformPlugin.QVR_Prefs_HasKey(key);
}
else
{
return PlayerPrefs.HasKey(key);
}
}
public static void Save()
{
if (QiyuPlatform.IsAndroid)
{
QiyuXRPlatformPlugin.QVR_Prefs_Save();
}
else
{
PlayerPrefs.Save();
}
}
注意:
奇遇设备支持多账号登陆和退登,所以在使用Prefs提供的方法时,需将奇遇账号信息连同需要存储的数据关联,以实现针对每个用户正确的档案数据。
QiyuPrefs为本地存档方案,支持应用升级、卸载重装后保留用户数据,并非“云存档”。
多账号存档Demo:
QiyuXRPlatform.GetQiyuAccountInfo(QiyuMessage.GetRequestResult<QiyuMessage.QiyuAccountInfo>((msg) =>
{
if (msg.IsSuccess())
{
//记录uid
string uid = msg.data.uid;
//使用uid前缀存取存档
string name = QiyuPrefs.GetString(uid + "name");
QiyuPrefs.SetString(uid + "name", name);
int level = QiyuPrefs.GetInt(uid + "level");
QiyuPrefs.SetInt(uid + "level", level);
QiyuPrefs.Save();
}
}));
应用内支付仅支持“应用”使用,不支持“游戏”使用。
应用内支付支持用户在应用里购买虚拟商品、代币等内容。开发者可在奇遇开发者平台创建、配置、编辑商品信息,再通过SDK提供的接口集成进应用中。
奇遇商品支付通过"手机短信-链接跳转到微信/支付宝"完成,主要流程如下图所示,您可根据流程和SDK Demo完成内支付功能的接入和开发。
奇遇开发者平台 - 应用 - 附加内容页提供新增、查看和管理应用程序的应用内支付商品的功能。
1. 新增商品
点击「新增」按钮,然后填入:
名称: 此名称为您创建的应用内购买的名称。
SKU: SKU 是代码中映射关联到此附加内容的唯一标识符,不同物品间的 SKU 不可以重复。
价格: 以人民币(CNY)为单位。
物品类型: 物品类型分为消耗型和持久型。消耗型为可重复购买的商品,如金币;持久型为一次性购买产品,如视频资源。
点击「批量上传」按钮。按照“文件模板”提供的格式,将更改好的文件进行上传。
文件内需要批量录入:1.名称,2.SKU,3.价格,4.物品类型。
2. 查看商品
点击应用操作栏中的「附加内容」可查看属于该应用的商品列表和信息。有关示例,请参见下图:
3. 操作商品
待发布:首次录入商品之后,为待发布状态。可以进行发布以及编辑操作。
已发布:发布操作后,状态变为已发布。可以进行下线操作。
已下线:下线操作后,状态变为已下线。可以进行发布以及上线操作。
在发布或者下线的弹窗中,可以选择立即或者定时。如果您选择定时发布/下线的话,游戏内购买状态将在您选择的时间节点进行状态变更。
商品创建成功后,可以通过编辑,修改商品价格。
4. 通知地址
此地址为订单通知的服务器地址。点击「通知地址」按钮,输入订单支付通知地址。
/// <summary>
/// 初始化奇遇支付接口
/// </summary>
public static void InitQiyuPay(RequestCallback callback)
{
if (!QiyuPlatform.IsAndroid)
return;
QiyuXRPlatformPlugin.QVR_InitQiyuPay(QiyuMessageManager.AddRequest(callback));
}
返回码 | 原因 |
---|---|
S0000 | 初始化成功 |
S9000 | 系统异常 |
S1000 | 平台未初始化或初始化失败 |
/// <param name="callback"></param>
/// <param name="skuList">参数格式:"sku1,sku2,sku3",参数为空时获取全部</param>
public static void GetSkuList(RequestCallback callback, string skuList = "")
{
if (!QiyuPlatform.IsAndroid)
return;
QiyuXRPlatformPlugin.QVR_GetSkuList(QiyuMessageManager.AddRequest(callback), skuList);
}
返回码 | 原因 |
---|---|
S0000 | 查询成功 |
B1001 | 查询结果为空 |
S9000 | 系统异常 |
S9001 | 参数错误 |
S1000 | 平台未初始化或初始化失败 |
S1001 | 支付未初始化或初始化失败 |
/// <param name="callback"></param>
/// <param name="sku">要购买商品的sku</param>
public static void PlaceOrder(RequestCallback callback, string sku)
{
if (!QiyuPlatform.IsAndroid)
return;
QiyuXRPlatformPlugin.QVR_PlaceOrder(QiyuMessageManager.AddRequest(callback), sku);
}
返回码 | 原因 |
---|---|
S0000 | 成功下单 |
B3007 | 设备识别码无效 |
B4010 | 您已购买过该SKU |
B4009 | 您有一笔待支付订单 |
B3019 | 商品不存在 |
S9000 | 系统异常 |
S9001 | 参数错误 |
S1000 | 平台未初始化或初始化失败 |
S1001 | 支付未初始化或初始化失败 |
/// <param name="callback"></param>
/// <param name="orderId">PlaceOrder返回的订单号</param>
public static void QueryOrderResult(RequestCallback callback, string orderId)
{
if (!QiyuPlatform.IsAndroid)
return;
QiyuXRPlatformPlugin.QVR_QueryOrderResult(QiyuMessageManager.AddRequest(callback), orderId);
}
返回码 | 原因 |
---|---|
S0000 | 查询成功 |
B1003 | authCookie失效 |
B3019 | 商品不存在 |
B1001 | 查询结果为空 |
S9000 | 系统异常 |
S9001 | 参数错误 |
S1000 | 平台未初始化或初始化失败 |
S1001 | 支付未初始化或初始化失败 |
订单查询成功后,同时会返回订单数据,开发者根据“orderStatus”字段判断支付是否成功。
/// <param name="callback"></param>
/// <param name="sku">要查询商品的sku</param>
/// <param name="curPage">分页查询的页号,默认查询第1页</param>
/// <param name="pageSize">每页指定订单数量,默认每页显示10个</param>
public static void QueryHistoryOrders(RequestCallback callback, string sku, int curPage = 1, int pageSize = 10)
{
if (!QiyuPlatform.IsAndroid)
return; QiyuXRPlatformPlugin.QVR_QueryHistoryOrders(QiyuMessageManager.AddRequest(callback), sku, curPage, pageSize);
}
返回码 | 原因 |
---|---|
S0000 | 查询成功 |
B1003 | authCookie失效 |
B3019 | 商品不存在 |
B1001 | 查询结果为空 |
S9000 | 系统异常 |
S9001 | 参数错误 |
S1000 | 平台未初始化或初始化失败 |
S1001 | 支付未初始化或初始化失败 |
请参见4.2 服务端支付结果通知 (opens new window)。
点击「申请测试用户账号」,选择申请数量(最多可申请3个),点击确认后可以看到测试账号的列表;同时,我们会将测试账号的邮箱和密码以邮件形式发出,请注意查收。
开发者通过账号右侧的开关来模拟测试账号支付成功或失败的结果,再在奇遇设备中登录测试测试账号,以实验应用前端的效果。 注意:密码中特殊符号请使用英文字符,中文字符会登录失败。
如果需要申请更多测试用户账号,请发邮件至vrsupport@qiyi.com,我们会尽快给您回复。
奇遇平台提供应用可下载附加内容(Downloadable Add-on Content)的售卖。
开发者可在奇遇开发者平台创建、配置、编辑DLC信息,再通过SDK提供的接口集成进游戏中。DLC内容通过平台审核后,可在奇遇商店上架进行销售。用户在商店里购买游戏币、新的关卡、地图、媒体库等内容。进入游戏后,解锁新关卡,下载新资源。您可根据流程和SDK Demo完成DLC功能的接入和开发。
奇遇开发者平台 - 应用 - 附加内容提供新增、查看和管理应用程序的可下载内容商品的功能。
点击「新增」按钮,然后填入:
附加内容类型:选择可下载内容。
名称: 此名称为您创建的游戏内购买的名称。
SKU: SKU 是代码中映射关联到此附加内容的唯一标识符,不同物品间的 SKU 不可以重复。
价格: 可以选择免费或付费,付费的价格以人民币(CNY)为单位,可以精确到分。
物品类型: 物品类型分为消耗型和持久型。消耗型为可重复购买的商品,如金币;持久型为一次性购买产品,如新关卡。
简介: 输入关于该商品的简介,上限为500字符。
描述: 输入关于该商品更为细致的描述,上限为1000字符。
ICON:上传该DLC的ICON,该ICON将会展示给用户。
如果您有其他资产需要上传,或者您的可下载内容有文件需要上传,请在列表中点击「编辑」按钮。
您可以在这里选择您通过奇遇开发者上传工具上传的DLC文件。
您可以在描述页对您填入的名称、简介、描述进行修改。
您可以在资产页补充关于该可下载内容的资产物料。
请注意:虽然只有ICON为必填项,但其他非必填项如果您填写并审核通过的话将获得最高优先级的推荐。
可以在这里修改价格。
点击应用操作栏中的「附加内容」可查看属于该应用的可在列表中看到可下载内容信息。有关示例,请参见下图:
可下载内容均需要提交奇遇平台进行审核,只有审核通过后,奇遇平台才会对该可下载内容进行上线操作。点击操作栏中的「提交审核」。
您可以对已经发布的可下载内容进行排序,从而控制可下载内容在产品详情页的展示顺序,点击「产品详情页排序」。
操作栏的上下按钮可以控制附加内容的排序。
SDK提供以下数据结构和客户端接口,支持应用完成DLC权益查验、文件下载功能:
public class QiyuDlcAssetDetail
{
public const int ASSET_TYPE_PERSISTENT = 1;//持久型dlc
public const int ASSET_TYPE_CONSUMED = 2;//消耗型dlc
public const int PAY_TYPE_FREE = 0;//免费
public const int PAY_TYPE_PAID = 1;//付费
public string sku;
public string name;
public int type;
public int payType; //PAY_TYPE_FREE, PAY_TYPE_PAID
public float originalPrice;
public float salePrice;
public string shortDescription;
public string iconURL;
}
public class QiyuDlcAssetStatus
{
public const int DOWNLOAD_STATUS_AVAILABLE = 0;//可下载
public const int DOWNLOAD_STATUS_DOWNLOADING = 1;//下载中
public const int DOWNLOAD_STATUS_COMPLETE = 2;//下载完成
public const int DOWNLOAD_STATUS_PENDING = 3;//下载暂停
public string sku;
public bool purchased; //true是已经购买,false未购买
public int downloadStatus; //上面的四种DOWNLOAD_STATUS之一
public string filePath;
}
public class QiyuDlcNotifications
{
public const string CODE_COMPLETE = "S0000";//下载完成
public const string CODE_ERROR = "C1000"; // 未知错误
public const string CODE_MD5_FAILED = "C1001"; // MD5校验失败
public const string CODE_LOW_STORAGE = "C1002"; // 文件储存空间不足
public const string CODE_INTERUPT = "C1003"; // 接收数据被中断
public const string CODE_SERVER_DISCONNECT = "C1004"; // 与服务器链接失败
public const string CODE_INVALID_VERSION = "C1005"; // 资源不存在
public const string CODE_DOWNLOADING = "C1006"; // DLC正在下载中
public string sku;
public double currentSize;//当前下载进度的文件大小,单位MB
public double totalSize; //总的文件大小,单位MB
public string code; //返回码是上面的CODE之一
public string filePath;//下载完成之后的路径
}
/// <summary>
/// 初始化接口
/// </summary>
/// <param name="callback"></param>
public static void Init(RequestCallback callback)
{
if (!QiyuPlatform.IsAndroid)
return;
QiyuXRPlatformPlugin.QVR_InitDLC(QiyuMessageManager.AddRequest(callback));
}
返回码 | 原因 |
---|---|
S0000 | 初始化成功 |
S1000 | SDK尚未初始化 |
S9000 | 系统异常 |
S9001 | 参数错误 |
/// <summary>
/// 获取dlc列表
/// </summary>
/// <param name="callback"></param>
/// <param name="curPage">分页查询的页号,默认查询第1页</param>
/// <param name="pageSize">每页指定数量,默认每页显示10个</param>
public static void GetAssetsList(RequestCallback callback, int curPage = 1, int pageSize = 10)
{
if (!QiyuPlatform.IsAndroid)
return;
QiyuXRPlatformPlugin.QVR_GetAssetsList(QiyuMessageManager.AddRequest(callback), curPage, pageSize);
}
返回码 | 原因 |
---|---|
S0000 | 查询成功 |
S1001 | 未初始化 |
B1001 | 查询结果为空 |
S9000 | 系统异常 |
S9001 | 参数错误 |
/// <summary>
/// 获取指定dlc状态
/// </summary>
/// <param name="callback"></param>
/// <param name="sku">dlc的sku</param>
public static void GetAssetStatus(RequestCallback callback, string sku)
{
if (!QiyuPlatform.IsAndroid)
return;
QiyuXRPlatformPlugin.QVR_GetAssetStatus(QiyuMessageManager.AddRequest(callback), sku);
}
返回码 | 原因 |
---|---|
S0000 | 成功 |
S1001 | 未初始化 |
B1001 | 查询结果为空 |
S9000 | 系统异常 |
B4015 | 不支持消耗型DLC鉴权 |
B1003 | 用户账户已过期 |
B4000 | APP鉴权失败 |
注:消耗型DLC,参见4.2 服务端支付结果通知 (opens new window)。
/// <summary>
/// 下载指定dlc
/// </summary>
/// <param name="callback"></param>
/// <param name="sku">dlc的sku</param>
public static void DownloadAsset(RequestCallback callback, string sku)
{
if (!QiyuPlatform.IsAndroid)
return;
QiyuXRPlatformPlugin.QVR_DownloadAsset(QiyuMessageManager.AddRequest(callback), sku);
}
返回码 | 原因 |
---|---|
S0000 | 查询成功 |
S1001 | 未初始化 |
C1002 | 储存空间不足 |
C1005 | 资源不存在 |
B4015 | 不支持消耗型DLC的鉴权 |
B1003 | 用户账户已过期 |
B4000 | APP鉴权失败 |
B4013 | DLC鉴权失败 |
B3033 | DLC版本错误 |
注意事项:
/// <summary>
/// 设置下载进度通知
/// </summary>
/// <param name="callback">回调函数</param>
public static void SetDownloadUpdateCallBack(Action<QiyuMessage.QiyuDlcNotifications> callback)
{
if (!QiyuPlatform.IsAndroid)
return;
callbackInner = callback;
QiyuXRPlatformPlugin.QVR_DownloadUpdateNotifications(DownloadUpdateCallBack);
}
返回码 | 原因 |
---|---|
S0000 | 下载成功 |
C1001 | MD5校验不通过 |
C1002 | 写入错误,可能是储存空间不足 |
C1003 | 接收数据中断,可能是网络中断 |
C1004 | 向服务器发起连接请求失败 |
C1006 | 文件正在下载中 |
C1007 | 重复的下载请求 |
C1008 | 文件MD5正在校验中 |
C1000 | 系统异常 |
QiyuXRPlatform.LaunchHome("dlc", "123456");//第二个参数为DLC sku
请参见4.1 服务器端查单接口 (opens new window)。
请参见4.2 服务端支付结果通知 (opens new window)。
奇遇开发者平台给您提供了测试账号,您可以使用测试账号登录到一体机,以及配置相关选项来测试适配您的附加内容。
在DLC测试结果列,点击「设置」按钮,可以在弹窗内配置该测试账号是否购买该可下载内容,以及该可下载内容是否发布。
请注意:
我们在奇遇商店的开发者通道提供了DLC Demo,演示商店中DLC的展示效果和应用内相关接口的使用。体验步骤如下:
在应用详情页,“免费购买”Demo APP;在DLC详情页,“免费购买”附加内容。
点击“打开应用”,启动Demo,通过GetAssetsList可获取到本应用DLC列表;通过GetAssetStatus可获取到当前用户对于指定DLC的权益,同时对于包含附件文件的DLC,可获取到下载地址;通过DownloadAsset接口可下载已购买的附件文件;LaunchHome可跳转到奇遇商店指定DLC详情页。