发布招聘信息发布系统 app的app大家熟悉不?希望能选择应用。

【健身APP】辛苦搜索来的免费运动健身APP应用!!!转 - 薄荷减肥论坛
【健身APP】辛苦搜索来的免费运动健身APP应用!!!转[方法,交流]&
回复:7&|&浏览:70096&|&
&&|&&&&|&&&&|&&&&|&&
去其他板块
先恭喜薄荷自己的APP被推荐到appstore首页~
看到这个帖子挺好,转发到薄荷,希望能帮助到大家。
& 工作久坐?整天要面对电脑?三餐饮食不规律?难挡美食诱惑?……”
& & 众多原因都让深处职场的白领健康大打折扣,你是不是会时常感到颈椎不舒服肌肉变的越来越松弛小腹正日渐隆起,当年的六块腹肌,也变成了一整块腹肌~你是否感到满面黑线?怎么办?面对不知道从何学起的各种健身教程,你是否感到茫然?看到遥遥无期的运动计划,你是否感到坚持不下去,运动的热情,也和天上的善变云彩一样,或保持的长,或只是昙花一现。
  真的没有两全其美的办法了吗当然不是看网络上这些正兴起风靡大众的运动健身应用吧,有的能逐步帮你提升个人运动能力,有的能像贴身健身教练一样指导你,有的能够快速提高你的身体素质,甚至在运动中体验和分享更多的快乐,这些不仅能让你拥有一个健康的身体和超性感身材,还能让你爱上运动!
最重要的是,不用天天去健身房了,一样能锻炼你的身体!
最近h7n9感染人一天天增长,拥有好的身体免疫力靠的是平时的锻炼啊!
  Nike Training Club(iPhone/免费
  让女生也爱上运动
Nike大家都很熟悉,是著名的运动品牌,Nike Training Club(Nike训练营)正是该公司开发的一款运动辅助软件。Nike训练营为你提供随时随地的个人训练师,其中提供85项量身打造的运动计划,帮你打 造窈窕体态、美丽曲线和强健体能。获得额外奖励运动计划,例如明星Lea Michele、专业运动员Shawn和Rihanna的专属训练师Ary Nu?ez等提供的训练。
  NIKE针对年轻女性推出NIKE Training Club线上训练课程,融合了瑜珈、跑步等元素,量身打造个人的运动计画,女孩们可以根据自己的运动需求,选择适当的运动强度与频率。NIKE还贴心地设计了周期性的运动课表;除此之外,每项动作都是由国际级健身教练透过影像实境指导,就好比拥有专属健身教练贴身指导一样,让女生也爱上运动。
  下载链接:/cn/app/nike-training-club/id?mt=8
 咕咚运动+ iOS/Android 免费
  轻轻松松获得健美身材
  这是一款LBS运动激励应用,能够比较精确的追踪用户的运动路线、距离以及速度,实时监测运动数据,可以根据你的身高体重来计算你的卡路里燃烧,逐步提升你的个人运动能力,改善你的身体素质,能实现减肥健身的效果。
  作为苹果AppStore上最受欢迎的运动健身减肥应用之一,咕咚运动不但可以精确记录各种运动,还可以把你的运动成果通过微博、微信等“秀”好友看,更可以约周围的朋友一起运动、PK、挑战你的极限!让你体验快乐、科技与时尚,轻轻松松获得健美身材!
  下载链接:/us/app/gu-dong-yun-dong+zhuan-ye/id?ls=1&mt=8
100个俯卧撑 专业版
  型男必备工具!
  啥都不说,只问这一句,你知道善于做俯卧撑的男人性能力更强吗?
  为了让自己有结实性感的腹部,尤其在实施“男上位”性爱方式时,强壮腹肌会发挥巨大威力。那么你还犹豫什么?
“100个俯卧撑”说,为达到我这个目标,我们需要的是一个完美的计划,一些适当的规则和每周30分钟的训练,每周将被要求做3次训练,当然在训练的过程中,你可以随时关注你的排名,非常科学的训练方法!通过做俯卧撑的方式, 一步一步的帮助增强您的肌肉耐力。塑造惹火喷血的完美身材!
100个俯卧撑 其最大的特点就是根据你目前的能力设计训练计划,按照训练计划有休息间隔的完成训练。在很短的时间内即可打成 100 个俯卧撑的训练任务。
  100个俯卧撑 专业版是目前男士使用最多的应用,在运动过程中,它能够依靠每周的测试结果记录下使用者的数量并自动分配科学的锻炼计划,它还可以分析你的卡路里消耗等信息有助于你对运动效果做出评估,并用图表展示。
  下载链接:
我有着美丽的锁骨,迷人的腹肌,性感的水蛇腰。 只不过…… 只不过,它们都深埋在脂肪里。如果你喜欢,如果你有耐心,假以时日我总会让它们重见天日。。 ——摘自 《首先我是一个男人,然后才是一个同志》同志你好微笑征集:你就是力量!只需要你一个最真挚的微笑:.cn/s/blog_67fb47d20100l0bw.html围脖,重口味欢迎围观:
 && nike+running
  让跑步更有趣
 对于喜欢跑步运动的都市白领,都会对自己的运动有很好的计划,比如奔跑距离、热量消耗等等,而如今对于跑步运动的详细记录通过手机应用也可以实现。
  Nike+ Running将会让更多的跑步者在世界范围内记录、测量、对比及分享他们的跑步经历。此外,全新的Nike+Running体验还以更具针对性和更鼓舞 人心的新功能来激励跑步者,并通过NIKE+社区将信息共享,该社区创建于2006年,至今已有将近七百万的注册用户。
  该软件最大的亮点是基于GPS的定位和计算跑步里程的功能,伴随跑程的导航系统精简,能让跑步者轻松查阅跑步时的关键数据和GPS追踪定位地图,并且会在 跑者每完成1公里时进行语音提示,播报跑者已经完成的公里数和所用时间,以及这1公里所用的时间。记者在设置选项里设定了女声播报,虽然这个女声没那么温 柔,但在漫长的跑步过程中,跑步者是多么希望她快点出来告诉自己又完成了一公里。另外,软件工作时支持音乐播放,还可为自己设定“激励”歌曲。
  下载链接:/cn/app/nike-gps/id?mt=8
&&& 瘦身战争
&&& 为好身材而战
主要是面向女性用户,定位是体感瘦身+社交游戏。
  这是一款社交+竞技的瘦身应用,主要面向女性用户。应用内有一个虚拟教练,你可以跟着她做一些运动。应用会根据你的年龄、体重、身高来计算你每天应该完成的运动量。从腰、腹、腿等多个方面帮助女性解决重塑体型的问题。
  该应用提供3种运动模式:单人、双人以及多人竞技。后面两种模式中,如果你在比赛中获胜就可以获得一定的金币,从而增强你的运动积极性。而这些金币可以用来为自己购买虚拟头像、运动背景或兑换其他礼品。
  《瘦身战争》被誉为全球第一款利用碎片化时间,帮助女孩瘦身的“体感+社交”游戏。Appstore日本区Health排行榜第一名,中国区Health排行榜前三名。这款应用已申请5项发明专利,是随身携带的Wii Fit。
APP Store:/cn/app/shou-shen-zhan-zheng/id?mt=8
轻松纾解你的压力
《每日瑜伽》应用截图
 每日瑜伽是一款功能全面的综合型瑜伽产品,提供极致彷真的掌上瑜伽课程。在训练过程中,所有的课程经由我们的特聘瑜伽导师精心设计,每一个瑜伽体式将由
业瑜伽老师通过全屏视频演示,配有文字说明和语音解说。每一个动作皆设有定时,时间一到便伴随着语音提醒自动切换到下一个动作。辅以舒缓的背景音乐,让你
尽享细腻的教学体验。 一个课程训练完毕,您就可以获得该课程积分,鼓励机制让您更加积极!
  在训练过程中,所有的课程经由我们的特聘瑜伽导师精心设计,每一个瑜伽体式将由专业瑜伽老师通过全屏视频演示,配有文字说明和语音解说。每一个动作皆设有定时,时间一到便伴随着语音提醒自动切换到下一个动作。加上舒缓的背景音乐,让工作一天的你,倍感放松。
  下载地址:/cn/app/id?mt=8
 走走看计步器
& &健康生活的目标是:每天一万步
  上班族们经常以“没时间”为理由推脱锻炼,其实如果真想锻炼,在日常生活中时刻都有机会,比如上下班的路上,提前一站下车,剩下的路走着到达,同样可以达到锻炼的目的。走走看计步器是全球首款iPhone中文计步器,不论拿在手上、放在上衣口袋里、放在裤兜里、是别在腰间,或是绑在手臂上。也不论是正着拿、反着拿、或是横着拿、竖着拿,走走看计步器都能准确的计算你所行走过的步数。
下载地址:/cn/app/zou-zou-kan-ji-bu-qi/id?mt=8
  Fitness Class(iPad/免费)
& & 将著名教练请到家
  Fitness Class是一款健身软件,其中包含230个实时健身视频,包括锻炼力量、耐力、稳定性、控制体重的训练视频,以及瑜伽、普拉提等运动的教学视频。即使没有私人教练,你也可以得到专业的指导。
  你可以通过WiFi或3G来浏览健身视频软件。当你开始一个新的任务,你的ipad不仅可以记录你的运动情况,还可以记录你的热量消耗情况。当然,如果你愿意,你还可以直接把它发布到Facebook & Twitter上去,让朋友们都了解你每次的运动情况。
  FitnessClass不仅提供iPad版,而且也可以从Mac或PC上通过Web版访问。课程状态和收藏的课程可以在不同终端间自动同步。(MK)
App store:/us/app/fitnessclass/id?mt=8
益动GPS专业版
& & 随时随地记录您的运动数据
益动GPS的强项在于自动记录运动的各项数据,运动轨迹,并可以方便的分享到SNS上去。显示天气和空气污染指数,实时更新好友数据,运动历史数据可以很好的保存(本机,云存储)。
益动GPS在可测量性,和成就激励上非常优秀,用户体验良好,测量数据精准,生成的运动数据可以直观的分享到SNS上,也可以查看好友的实时运动数据。
下载链接:/cn/app/id?mt=8
30天瘦小腿推拿
作为美女你一定要有美腿!
  小腿是女人最性感的部位,作为美女你一定要有美腿! 通过我们的推拿法来瘦腿吧,通过经络调理的方法很有效!
& &&&拥有一双完美的美腿是所有女性毕生追求的目标,一双美腿如果是天生的,那你就太幸运了,真得要好好谢谢父母的恩典。但是,美腿不保养还是会变章鱼腿哦!如果先天条件不足,依然可以靠后天的努力来完成腿部的曲线。
 《30天瘦小腿推拿》详细讲解小腿附近的穴位。每天增设任务约10分钟左右的穴位按摩,可以瘦腿。任务按照穴位分段进行,每个穴位需按两分钟。避免漏了哪个穴位,30天后记得拿皮尺量一下有没有效果。
& &下载链接: /cn/app/30tian-shou-xiao-tui-tui-na/id?mt=8
当然了,健身不易,贵在坚持。如果没有执行力,再好的应用、再科学的方法都无用武之地。希望对大家有用!
我有着美丽的锁骨,迷人的腹肌,性感的水蛇腰。 只不过…… 只不过,它们都深埋在脂肪里。如果你喜欢,如果你有耐心,假以时日我总会让它们重见天日。。 ——摘自 《首先我是一个男人,然后才是一个同志》同志你好微笑征集:你就是力量!只需要你一个最真挚的微笑:.cn/s/blog_67fb47d20100l0bw.html围脖,重口味欢迎围观:
啦啦啦~跪求加精华
我有着美丽的锁骨,迷人的腹肌,性感的水蛇腰。 只不过…… 只不过,它们都深埋在脂肪里。如果你喜欢,如果你有耐心,假以时日我总会让它们重见天日。。 ——摘自 《首先我是一个男人,然后才是一个同志》同志你好微笑征集:你就是力量!只需要你一个最真挚的微笑:.cn/s/blog_67fb47d20100l0bw.html围脖,重口味欢迎围观:
早上起来,看帖子被锁了。跟薄荷沟通了一番之后,已经解锁。
效率不错,赞一记!!
还是很爱薄荷~&
我有着美丽的锁骨,迷人的腹肌,性感的水蛇腰。 只不过…… 只不过,它们都深埋在脂肪里。如果你喜欢,如果你有耐心,假以时日我总会让它们重见天日。。 ——摘自 《首先我是一个男人,然后才是一个同志》同志你好微笑征集:你就是力量!只需要你一个最真挚的微笑:.cn/s/blog_67fb47d20100l0bw.html围脖,重口味欢迎围观:
很赞,但大多数都是IOS的吧,求安卓的
目标53KG,不达不罢休!加油!奖励:瘦身到55KG,一双NB跑鞋。
瘦身到53KG,心率表一只。
但是貌似Nike、咕咚运动、每日瑜伽 都有安卓版哦。
亲可以去安卓相关的应用商店下载~ =V= &&
我有着美丽的锁骨,迷人的腹肌,性感的水蛇腰。 只不过…… 只不过,它们都深埋在脂肪里。如果你喜欢,如果你有耐心,假以时日我总会让它们重见天日。。 ——摘自 《首先我是一个男人,然后才是一个同志》同志你好微笑征集:你就是力量!只需要你一个最真挚的微笑:.cn/s/blog_67fb47d20100l0bw.html围脖,重口味欢迎围观:
补充一个专注于无器械健身的手机应用,目前发布了iPhone版
没有时间去健身房?健身不知如何制定计划?
别急,咚咚健身帮你达到在家健身的梦想!
咚咚健身是专业的无器械健身应用,推崇简单健身方案,繁忙的你可以利用碎片时间进行练习,你可以在家、在办公室、在任何地方锻炼,你需要的只是一部装有咚咚健身的iphone手机。
功能特点:
1. 专业的健身方案,针对不同锻炼要求的人群
2. 碎片时间做练习,动态调整锻炼计划,完全不需要干预
3. 语音引导练习,仿佛教练在身边指导
4. 锻炼提醒,忘记了锻炼计划也没关系
5. 社交功能,除了通过微博等分享给朋友外,你还可以看见并参与到所有和你一样使用咚咚健身的人的讨论
6. 艰辛的锻炼历程,我们一一为你记录
APP下载地址:
好帖啊谢谢楼主转载-ios&app&应用内购买配置完全指南
第一印象觉得In-App Purchase(简称IAP)非常简单。Apple提供的应该让开发者很快熟悉地熟悉。那么,为什么在你的应用中集成IAP特性就如此令人生厌呢?
这是因为在开发过程中不可避免会出现一些错误。而但这些错误发生的时候,你就抓瞎了。虽然Apple提供了有关IAP的大量文档,但他们并未提及集成IAP的详细步骤。而且对StoreKit集成过程中出现的问题也没有一个核对清单。另外对于为什么诸如产品ID非法之类的问题也没有提供NSError之类的对象来告诉你原因。
在试用了各种可能的解决方案后,你只能身心疲惫,彷徨无助。
为了提高你的效率和减少你的痛苦,我觉定利用此文来介绍一下实现IAP的详细步骤。本文很详细,有点长。甚至可能太长了,但不像Apple的文档,它提供了为实现IAP的每一个步骤。
废话少说,我们直入主题吧。
IAP能正常工作的秘诀:分成两个步骤:
创建及提取产品描述
第一个步骤是你可能遇到问题的部分。一旦你在代码中成功地获取了产品描述,编写购买产品的代码不过是小菜一碟。
我们先看看步骤1。
创建及提取产品描述
下面是有关创建产品及提取其描述的非常粗略的步骤:
创建唯一的App ID
生成及安装新的provisioning profile文件
在Xcode中更新 bundle ID 及 code signing profile
如果还没做的话,请在iTunes Connect中提交有关你程序的 metadata
如果还没做的话,请在iTunes Connect中提交你程序的二进制码
为IAP添加新产品
编写提取产品描述的代码
等待几小时
提取产品描述的代码非常简单,但其他步骤则很容易错。
注意:&为提取产品描述,你并不需要在iTunes
Connect中创建IAP测试用户。
1. 创建唯一的App ID
为支持IAP,你的App ID不能包括通配符(“*”)。为确定你的App Id是否包括通配符,请登录,在
iPhone Developer Program Portal中选择左边菜单中的 “App IDs”检查你的 App ID。
下面是一个唯一的App ID:
.runmonster.runmonsterfree
下面不是一个唯一的 App ID:
.runmonster.*
如果你还没有一个唯一的App ID,按如下步骤创建一个:
在developer portal中的 App IDs 部分,选择“New App ID”
填写下列信息:
Display name(显示名): 选取一个不同的App ID的名称。你不能编辑或删除旧的App
ID,所以你必须为你的App ID提供一个新名称以避免混淆。
Prefix(前缀): 生成一个新的前缀,或者如果你的程序是的系列程序中之一的话,则选用已存在的前缀。
Suffix(后缀):&<panyname.appname&(这是通用格式
& 注意没有使用通配符)。
按 “Save”
按 App ID旁的“Configure” 链接
选取 “Enable In App Purchase”选择框
按“Done”
2. 创建一个新的Provisioning Profile文件
在创建了新的App ID后,你需要生成一个指向这个App ID的新provisioning profile。
下面就是令人痛苦的生成和安装新provisioning profile的详细步骤:
在 iPhone Developer Portal中, 选择左边的Provisioning部分
确保你处于Development 标签下, 按下右上角的 “New Profile”
填入所需信息并指向你刚创建的唯一的App ID
如果你在Actions条目下看到 “Pending”,那么请按下“Development”标签标题进行刷新
点击 “Download” 下载新的profile文件
将profile文件拖入到Dock中Xcode图标上进行安装
如果你想在硬盘上保存provisioning profile,那么你可以按如下步骤手工安装profile:
在Xcode中, 选择 Window & Organizer
选择左边 “Provisioning Profiles” 分类
Ctrl-按下profile & Reveal in Finder
将新profile拖入到 profile Finder 窗口
3. 更新Xcode 设置
在Xcode中安装了 profile 文件后,你需要对使用此provisiong profile的项目进行一些编辑工作:
编辑项目 .plist 文件使其 Bundle ID 与 App ID
匹配。忽略ID开始部分的字母数字序列。例如,在Developer Portal中你的App
ID为“.runmonster.runmonsterfree”,那么在Bundle
ID中你只需输入“com.runmonster.runmonsterfree” 。
编辑项目的 target 信息以使用新的provisioning profile:
选取 Project & Edit Active Target
选取顶部“Build” 标签
选取需要的 configuration (通常为 Debug)
在Code Signing Identity中选择新的provisioning
在Code Signing
Identity之下的行中(可能名为&Any iPhone OS
Device)选择新的provisioning profile
4. 添加你的应用程序
如果你的程序已经发表到App Store了,那么可以略过此步骤。
在你将产品添加到 iTunes
Connect之前,你必须添加此产品所需的程序。如果你的程序还没有100%完成也无需担心,你可以先提交具有部分数据的程序,最后再提交真实的程序。
注意: 只有 SKU 和 version(版本)部分是以后不可修改的
点击右边链接进入 iTunes Connect
注意:你必须先登录到,否则会有不测发生(译者注:具体是什么不测我也不太清楚,胆大的请自己试一下)
在 iTunes Connect主页点击 “Manage Your Applications”
在右上角点击“Create New Application”
填写程序所需的一切信息。当要求程序二进制码时,请选择稍后上传选项。
5. 提交程序二进制码
Apple的文档中没有任何地方提及详情,但它却是必须的步骤。要成功测IAP功能,你必须提交程序的二进制码。即使你的程序还没有100%完成,你仍然需要提交二进制码。然而,你也可以立即摈弃你的二进制码,使其不会进入审核阶段。
下面这些步骤非常关键,我可是因为少做了某些步骤而度过了一段非常痛苦的时间:
生成App Store发布版程序
如果你不知怎么做,请在 iPhone Developer Portal 中点击左方的 Distribution标签,并选择
“Prepare App” 标签。然后,根据蓝色链接的指示:
获取iPhone发行许可证
创建并下载在App Store发行所需的iPhone Distribution Provisioning Profile
在Xcode中生成程序的发行版
在iTunes Connect中进入程序页
选择 “Upload Binary”
上传.zip压缩程序
如果你的程序还没有100%完成以进行审核,那么请点击iTunes Connect中你程序首页中的 “Reject
Binary”链接。程序的状态应该更新为 “Developer Rejected”.
不用担心,由于程序的状态是“Developer
Rejected”,Apple是不会对其进行审核的。你可以在任何时候提交程序的新版本并使其状态为“Developer
Rejected”,这不会对以后程序正式提交的等待时间有任何影响。
6. 添加产品
完成了以上所有步骤后,我们最终可以向iTunes Connect中添加产品了。
确保登录到&
进入 iTunes Connect 主页
点击 “Manage Your in App Purchases” 链接
点击 “Create New”
选择你的程序
填写下列产品信息:
Reference Name(参考名称): 产品的通用名称。比如,我使用的是 “Pro
Upgrade”。此名称是不允许进行编辑的,它不会显示于App Store中。
Product ID(产品ID):
你产品的唯一id。通常格式是&<pany.appname.product,但它可以说任何形式。它并不要求以程序的App
ID作为前缀。
Type(类型): 有三种选择
Non-consumable(非消耗品): 仅需付费一次
(例如你希望将出现从免费版升级为专业版)
Consumable(消耗品): 每次下载都需要付费
Subscription(预订): 循环反复
Price Tier(价格等级): 产品价格。参见不同等级的价格列表。
Cleared for Sale(等待销售):
一定要选取此项,否则的话,测试时会发生非法产品ID的错误。
Language to Add(增加的语言): 选一项。下列两项将出现:
Displayed Name(显示名称): 用户看到的产品名称。比如我选择 “Upgrade to
Description(描述): 对产品进行描述。此处输入的文本将与Displayed Name 及
Price 一起在你代码中提取 SKProduct时出现。
Screenshot(截屏):
展示你产品的截屏。尽管屏幕上会显示“提交截屏会触发产品审核过程”之类的文字(个人拙见,这是非常糟糕的设计),你还是可以安全地提交截屏而不会使产品进入审核过程。存储后,选择“Submit
with app binary”
(随程序二进制码一起提交)选项。是产品与程序二进制绑定在一起,所以在你最后正式提交100%完成的程序二进制码时,产品也会随之提交。
点击 “Save”
7. 编写代码
下面我们开始编写代码对刚加入到iTunes Connect中的产品信息进行提取。我访问产品数据,我们需要使用 StoreKit
framework。
注意: StoreKit 无法在模拟器上工作。你必须在真机上进行测试。
1.添加 StoreKit framework 到你的项目中。
2.添加SKProduct引用到你的 .h 文件中:
// InAppPurchaseManager.h
&StoreKit/StoreKit.h&
#define kInAppPurchaseManagerProductsFetchedNotification
@"kInAppPurchaseManagerProductsFetchedNotification"
@interface&InAppPurchaseManager&:&&&SKProductsRequestDelegate&
SKProduct&*proUpgradeP
SKProductsRequest&*productsR
注意: InAppPurchaseManager
是一个单例类,它处理程序中所有IAP任务。它是本文中的示例程序。
3.产品请求,并在相应.m文件中实现代理协议:
// InAppPurchaseManager.m
-&(void)requestProUpgradeProductData
& &&&*productIdentifiers&=&[&setWithObject:@"com.runmonster.runmonsterfree.upgradetopro"&];
productsRequest&=&[[SKProductsRequest
alloc]&initWithProductIdentifiers:productIdentifiers];
productsRequest.delegate&=&
& &&[productsRequest
we will release the request object in the delegate
#pragma mark -
#pragma mark SKProductsRequestDelegate methods
-&(void)productsRequest:(SKProductsRequest&*)request
didReceiveResponse:(SKProductsResponse&*)response
& &&&*products&=&response.
proUpgradeProduct&=&[products
count]&==&1
?&[[products
firstObject]&retain]&:&nil;
& &&if&(proUpgradeProduct)
& NSLog(@"Product
title: %@"&,
proUpgradeProduct.localizedTitle);
& NSLog(@"Product
description: %@"&,
proUpgradeProduct.localizedDescription);
& NSLog(@"Product
price: %@"&,
proUpgradeProduct.price);
& NSLog(@"Product
proUpgradeProduct.productIdentifier);
& &&for&(&*invalidProductId&in&response.invalidProductIdentifiers)
& NSLog(@"Invalid
product id: %@"&,
invalidProductId);
finally release the reqest we alloc/init’ed in
requestProUpgradeProductData
& &&[productsRequest
& &&[[&defaultCenter]&postNotificationName:kInAppPurchaseManagerProductsFetchedNotification
object:self
userInfo:nil];
上面代码有几点需要注意:
指定产品id时,你必须使用完整产品id。例如,上例中使用
“com.runmonster.runmonsterfree.upgradetopro”。仅使用 “upgradetopro”
将不会正常工作。
如果在productsRequest:didReceiveResponse:中response.products 为
nil,而你的产品id出现于 response.invalidProductIdentifers
数组中时,那么请做好心理准备开始一场徒劳的搜索战吧。 StoreKit
API没有提供任何帮助,也没有任何指示关于为什么你的id是无效的。很可爱,不是吗?
SKProduct类提供了有关程序标题和描述的本地化版本,但是价格则没有本地化版本。下面是针对此疏忽提供的代码:
// SKProduct+LocalizedPrice.h
&Foundation/Foundation.h&
&StoreKit/StoreKit.h&
@interface&SKProduct&(LocalizedPrice)
@property&(nonatomic,
readonly)&&*localizedP
// SKProduct+LocalizedPrice.m
#import "SKProduct+LocalizedPrice.h"
@implementation&SKProduct&(LocalizedPrice)
-&(&*)localizedPrice
& &&&*numberFormatter&=&[[&alloc]&init];
& &&[numberFormatter
setFormatterBehavior:NSNumberFormatterBehavior10_4];
& &&[numberFormatter
setNumberStyle:NSNumberFormatterCurrencyStyle];
& &&[numberFormatter
setLocale:self.priceLocale];
& &&&*formattedString&=&[numberFormatter
stringFromNumber:self.price];
& &&[numberFormatter
& &&return&formattedS
加入上述代码,测试一下。你应该在控制台窗口中看见产品信息了。然而更大的可能是,你得到了一个无效的产品id。我下一篇将介绍怎样对这个问题进行调试。但是,下面的步骤8有可能是阻碍你前进的障碍。
8. 等待几小时
遵循了上述所有步骤,但是你的产品仍然是无效的?你是否两次,三次,四次不懈努力地确认你是否遵循了上面提到的每个步骤?你是否已经对网上IAP信息少得可怜而感到绝望?
那么,你应该等待。
你的产品要进入iTunes
Connect使得Apple准备好沙箱环境需要一些时间。对于我而言,我是经过了无数次产品无效错误的绝望。而在24小时后,我没有修改任何一行代码,但产品id变为有效。我认为要使产品发布到Apple的网络系统需要几个小时的时间,但如果你有时间的话,你可以像我一样等上24个小时。
至此你应该已经成功地获取了 SKProduct 描述。比较而言,支持购买产品相对简单些。仅需下面三个步骤:
编写代码支持事务(transaction)
在iTunes Connect中添加程序测试用户
在设备中登录你的 iTunes Store 帐号
我们从编写支持事务所需代码开始。
1. 编写代码支持事务
首先注意:你将负责开发产品购买的用户界面。StoreKit 未提供任何与用户界面相关的元素。如果你希望你的购买用户界面与App
Store一样,那么你要自己完成。
下面所有代码都是有关事务处理的后台部分。这是一个单独的类只有一条简单的API以供外部类(比如view
controller)调用进行购买。如果你找到将其集成到你程序的购买部分的方法,那么我推荐你使用类似方案。
首先,需要遵循 SKPaymentTransactionObserver 协议:
// InAppPurchaseManager.h
// add a couple notifications sent out when the transaction
#define kInAppPurchaseManagerTransactionFailedNotification
@"kInAppPurchaseManagerTransactionFailedNotification"
#define kInAppPurchaseManagerTransactionSucceededNotification
@"kInAppPurchaseManagerTransactionSucceededNotification"
@interface&InAppPurchaseManager&:&&&SKProductsRequestDelegate,
SKPaymentTransactionObserver&
// public methods
-&(void)loadS
-&(BOOL)canMakeP
-&(void)purchaseProU
上面我们定义了两个新的notification,它们将作为购买事务的结果被发送。在上例中我们仍然使用与获取产品描述同一个InAppPurchaseManager类。
// InAppPurchaseManager.m
#define kInAppPurchaseProUpgradeProductId
@"com.runmonster.runmonsterfree.upgradetopro"
#pragma Public methods
// call this method once on startup
-&(void)loadStore
restarts any purchases if they were interrupted last time the app
& &&[[SKPaymentQueue
defaultQueue]&addTransactionObserver:self];
get the product description (defined in early
requestProUpgradeProductData];
// call this before making a purchase
-&(BOOL)canMakePurchases
& &&return&[SKPaymentQueue
canMakePayments];
// kick off the upgrade transaction
-&(void)purchaseProUpgrade
SKPayment&*payment&=&[SKPayment
paymentWithProductIdentifier:kInAppPurchaseProUpgradeProductId];
& &&[[SKPaymentQueue
defaultQueue]&addPayment:payment];
#pragma Purchase helpers
// saves a record of the transaction by storing the receipt to
-&(void)recordTransaction:(SKPaymentTransaction&*)transaction
& &&if&([transaction.payment.productIdentifier
isEqualToString:kInAppPurchaseProUpgradeProductId])
save the transaction receipt to disk
&&[[&standardUserDefaults]&setValue:transaction.transactionReceipt
forKey:@"proUpgradeTransactionReceipt"&];
&&[[&standardUserDefaults]&synchronize];
// enable pro features
-&(void)provideContent:(&*)productId
& &&if&([productId
isEqualToString:kInAppPurchaseProUpgradeProductId])
enable the pro features
&&[[&standardUserDefaults]&setBool:YES&forKey:@"isProUpgradePurchased"&];
&&[[&standardUserDefaults]&synchronize];
// removes the transaction from the queue and posts a notification
with the transaction result
-&(void)finishTransaction:(SKPaymentTransaction&*)transaction
wasSuccessful:(BOOL)wasSuccessful
remove the transaction from the payment queue.
& &&[[SKPaymentQueue
defaultQueue]&finishTransaction:transaction];
& &&&*userInfo&=&[&dictionaryWithObjectsAndKeys:transaction,&@"transaction"&,&nil];
& &&if&(wasSuccessful)
send out a notification that we’ve finished the
transaction
&&[[&defaultCenter]&postNotificationName:kInAppPurchaseManagerTransactionSucceededNotification
object:self
userInfo:userInfo];
send out a notification for the failed transaction
&&[[&defaultCenter]&postNotificationName:kInAppPurchaseManagerTransactionFailedNotification
object:self
userInfo:userInfo];
// called when the transaction was successful
-&(void)completeTransaction:(SKPaymentTransaction&*)transaction
recordTransaction:transaction];
provideContent:transaction.payment.productIdentifier];
finishTransaction:transaction
wasSuccessful:YES];
// called when a transaction has been restored and and successfully
-&(void)restoreTransaction:(SKPaymentTransaction&*)transaction
recordTransaction:transaction.originalTransaction];
provideContent:transaction.originalTransaction.payment.productIdentifier];
finishTransaction:transaction
wasSuccessful:YES];
// called when a transaction has failed
-&(void)failedTransaction:(SKPaymentTransaction&*)transaction
& &&if&(transaction.error.code&!=&SKErrorPaymentCancelled)
finishTransaction:transaction
wasSuccessful:NO];
this is fine, the user just cancelled, so don’t
&&[[SKPaymentQueue
defaultQueue]&finishTransaction:transaction];
#pragma mark -
#pragma mark SKPaymentTransactionObserver methods
// called when the transaction status is updated
-&(void)paymentQueue:(SKPaymentQueue&*)queue
updatedTransactions:(&*)transactions
& &&for&(SKPaymentTransaction&*transaction&in&transactions)
&&switch&(transaction.transactionState)
&&case&SKPaymentTransactionStatePurchased:
completeTransaction:transaction];
& &&break;
&&case&SKPaymentTransactionStateFailed:
failedTransaction:transaction];
& &&break;
&&case&SKPaymentTransactionStateRestored:
restoreTransaction:transaction];
& &&break;
&&default:
& &&break;
要测试上面的新代码,你还需要编写调用 loadStore, canMakePurchases 以及
purchaseProUpgrade 方法的代码。
有关上述代码的详细解释,请参考官方&
上述代码有几个部分是针对我的程序的。例如,在 provideContent:中,NSUserDefaults
中的@”isProUpgradePurchased” BOOL 字段被设定为
YES。程序的其他部分将检查此BOOL值以确定是否需要启动专业版功能。如果你正好也要实现免费升级专业版的功能,那么你可以使用同样的方法。
2. 添加测试用户
为测试上述代码,你需要在 iTunes Connect
中创建测试用户以对IAP功能进行测试。你可以使用测试帐号购买产品而不被Apple收取费用。
按以下步骤创建测试用户:
进入 iTunes Connect
选择iTunes Connect首页中的 “Manage Users”
选择 “In App Purchase Test User”
选择 “Add New User”
填入用户信息. 所有信息都不必是合法的。建议使用虚假简短的email地址及简短的密码。
选择 “Save”
测试时你需要输入这些email地址和密码。
3. 在你的设备中退出登录
在进行程序购买功能测试前,你必须在你的设备中退出iTunes Store。遵循以下步骤:
打开Settings App
点击 “Store” 行
点击 “Sign Out”
4. 购买测试
现在,终于可以开始进行IAP功能的测试了。测试很简单:
运行你设备中的程序
当程序提示输入用户名和密码时,输入参数用户的信息
如果你使用同一账户进行购买时,系统将提示你已经购买了此产品。按“Yes”就可以再次下载此产品。
实现IAP功能比想象的要复杂许多。我可是经过无数痛苦的经历才完成我的程序。希望能够帮助其他开发者减轻他们的痛苦。
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。}

我要回帖

更多关于 whatsapp信息发布出去 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信