如何向List<string>类型的ItemIds属性添加动态数量字符串?报错排查
解决PlayFab GrantItemsToUser中ItemIds的参数错误问题
你遇到的这个报错,核心原因是给ItemIds传了一个二维数组,而PlayFab要求这个参数必须是一维的字符串数组。
看你当前的代码:
var playerrewards = []; playerrewards.push("ItemTitaniumSword"); playerrewards.push("ItemBambooSword"); var result = server.GrantItemsToUser( { PlayFabID: currentPlayerId, CatalogVersion : "New Shop", ItemIds : [playerrewards] // 这里错把数组又包了一层,变成二维数组了 });
playerrewards本身已经是一个字符串数组了,你再用[playerrewards]包裹它,就会变成[["ItemTitaniumSword", "ItemBambooSword"]]——PlayFab会把内层的这个数组当成一个无效的"item ID",自然就抛出了"invalid item at index 0"的错误。
正确的写法
直接把playerrewards赋值给ItemIds即可,不需要额外的中括号:
var playerrewards = []; playerrewards.push("ItemTitaniumSword"); playerrewards.push("ItemBambooSword"); var result = server.GrantItemsToUser( { PlayFabID: currentPlayerId, CatalogVersion : "New Shop", ItemIds : playerrewards // 直接传数组本身 });
这种写法完全支持动态数量的元素——不管你往playerrewards里push2个还是10个字符串,ItemIds都会拿到正确的一维字符串数组,完全符合PlayFab的参数要求。
额外的简化写法(可选)
如果不需要提前存储奖励列表,也可以直接在参数里定义数组:
var result = server.GrantItemsToUser( { PlayFabID: currentPlayerId, CatalogVersion : "New Shop", ItemIds : ["ItemTitaniumSword", "ItemBambooSword"] // 直接写一维数组 });
这样修改后,应该就能正常调用GrantItemsToUser接口,不会再触发那个无效item的报错了。
内容的提问来源于stack exchange,提问作者Hobbit7
相关产品推荐
相关产品推荐

