Invalid Product IDs(In app purcahse)

本文详细介绍了在实现In App Purchase过程中遇到的invalid ID问题及其解决方案,包括验证APP ID设置、Provisioning Profile、银行账号激活、苹果假期、等待时间、越狱设备等问题,并提供相关参考资料和应用示例。

转载请注明出处: http://blog.youkuaiyun.com/iflychenyang/article/details/9206697

在使用In App Purchase时,如果返回invalid ID(产品信息无效),那你就等着开始一段绝望的旅程吧,我曾为此付出了三周时间,下面对我所遇到的问题及解决方法做一些归纳。

1).确定已经遵从了以下的每一条。

a.创建唯一的APP ID,选取“Enable In-app Purchases”

b.创建新的Provisioning Profile文件,下载并将该profile文件拖入到Dock中的Xcode图标上进行安装

c.更新Xcode设置,codeSigning Identity 中选择新的provisioning profile。

d.添加新的应用程序

f.提交程序二进制码,然后将程序的状态改为”DeveloperRejected”

e.添加产品

h.将工程中的.plist 文件中的Bundle ID改成与App ID相匹配

i.程序中使用完整的product ID

2)确定银行账号信息有没有在iTunes Connect中被激活,我曾因为该问题浪费了近两周的工作量,始终找不到出错原因。

3)确定是不是赶上了苹果的放假时间,我也曾因为赶上了美国的圣诞节苹果放假,一周多获取不到产品信息。

4)等待24小时,你的产品要进入iTunes Connect使得Apple准备好沙箱环境需要一些时间。你可以尝试下等待24小时再试。

5)  确定您的机器有没有越狱,如果越狱,到cydia中看看有没有安装appsync插件,安装了的话,卸载该插件,重启机器,删除你的应用程序,重新用xcode启动安装你的应用程序试试。(这种情况我遇到过,花了我一周时间,把1)中的流程走了N遍,最后竟然是这个导致的~_~)

6) 如果以上你都试过了还是不行,请参考以下网址:http://troybrant.net/blog/2010/01/invalid-product-ids/,这里给出了可能的情况

7) 我的应用中有IAP功能,大家可以下载看看哦,软件名称:语音合成助手,下载地址:https://itunes.apple.com/cn/app/yu-yin-he-cheng-zhu-shou/id535120976?mt=8

在Kivy应用中,`App.root`实例无效的异常错误通常发生在尝试设置或访问`App.root`时,传入的值不是一个有效的Kivy `Widget`实例。Kivy期望`App.root`是一个`Widget`对象,用于作为整个用户界面的根节点。如果传入的是一个类名而非实例,或者传入的对象并非继承自`Widget`,就会触发`Exception: Invalid instance in App.root`的异常[^3]。 ### 常见原因及解决方法 1. **未实例化根组件** 在设置`App.root`时,必须使用括号创建一个`Widget`子类的实例,而不是直接使用类名。例如: ```python from kivy.app import App from kivy.uix.button import Button class MyApp(App): def build(self): return Button(text='Hello World') if __name__ == '__main__': MyApp().run() ``` 如果在`build()`方法中返回的是`Button`类而不是`Button()`实例,就会导致错误。确保在`build()`方法中返回的是实例而非类名。 2. **返回非Widget对象** `build()`方法必须返回一个`kivy.uix.widget.Widget`的子类实例。如果返回了其他类型(如字符串、数字、列表等),将导致异常。确保返回值是合法的UI组件。 3. **动态更改`App.root`时出错** 如果在运行时动态更改`App.root`,也必须确保赋值的是一个`Widget`实例: ```python app = App.get_running_app() app.root = MyCustomWidget() # 必须是实例 ``` 如果误写成`app.root = MyCustomWidget`(缺少括号),就会触发错误。 4. **使用KV文件加载时未正确关联** 如果使用`.kv`文件定义UI结构,需确保文件名与主类名匹配(如`myapp.kv`对应`MyApp(App)`),并在`build()`方法中不手动返回任何内容,否则会覆盖KV文件加载的根组件。 5. **检查Kivy版本兼容性** 在某些情况下,Kivy版本不兼容也可能导致`App.root`设置失败。可以在程序开始时添加以下代码以确保版本兼容: ```python import kivy kivy.require('2.0.0') # 根据实际需要的版本修改 ``` 如果当前安装的Kivy版本低于所需版本,会抛出异常,防止运行时错误[^1]。 ### 自定义异常处理(可选) 为了增强程序的健壮性,可以结合自定义异常类对错误进行更清晰的提示: ```python class InvalidRootWidgetError(Exception): pass class MyApp(App): def build(self): root = None if not isinstance(root, Widget): raise InvalidRootWidgetError("App.root 必须是一个Widget实例") return root ``` ### 总结 解决`Exception: Invalid instance in App.root`的关键在于确保始终将`App.root`或`build()`方法的返回值设为一个有效的`Widget`实例,避免使用类名或非`Widget`类型。此外,检查KV文件加载逻辑和Kivy版本也有助于排查此类问题。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值