本站文章均为 李华明Himi 原创,转载务必在明显处注明:
转载自【黑米GameDev街区】 原文链接: http://www.himigame.com/iphone-cocos2d/550.html
☞ 点击订阅 ☜ 本博客最新动态!及时将最新博文通知您!
在应用内嵌入付费代码这一快Himi可以直接将代码分享给大家,所以我们来说一些主要流程,毕竟没有接触过这一块的童鞋肯定相当头疼 =。 =
OK,步入整体,如果你想在iOS里内嵌收费,那么分为以下几步:
【提示:以下创建App部分内容,你不用非要等项目能打包了才开始做,可以随时并且随便的创建个测试项目即可,因为嵌入付费并不要求上传App的ipa包的!!】
第一步:你需要在iTunesConnect中创建个新的App,然后为这个App设置一些产品(付费道具)等;
OK,这里Himi稍微解释下,iTunesConnect是苹果提供的一个平台,主要提供AP发布和管理App的,最重要的功能是创建管理项目信息,项目付费产品(道具)管理、付费的测试账号、提交App等等,这里就简单介绍这么多,关于产品一词在此我们可以理解成游戏道具即可;在苹果看来所有付费都属于产品 =。 =千万不要纠结字眼哦~
OK,打开iTunesConnect网站:https://itunesconnect.apple.com/WebObjects/iTunesConnect.woa (注意:企业级的用户必须使用公司主开发者账号登陆才可!)
成功登陆后的页面如下:
这里大概说下重要的一些项:
Contracts, Tax, and Banking : 管理银行账号、联系人以及税等等;这里要根据提示完成对应的信息填写!一定要详细填写喔~
Manage Users :管理用户的,比如主账号以及测试付费的(测试App)账号;
Manage Your Applictions:管理应用程序的,你所有发布的应用和每个应用的状态都在这里面;
下面我们新建一个App项目,大家放心,我们这里创建的是不会直接提交给App审核的,所以放心创建,只要控制好App的状态不要是待审核状态即可,不过即使你不小心将项目提交了,也没事,直接更改App状态即可了;
选择Manage Your Applictions选项,然后新建一个项目:【Add New App】,根据提示来填写吧,这里就不细致说明了~
创建好一个App之后,在点击Manage Your Applictions后的界面应该如下:
这里你将看到自己创建的App,点击你创建的App项目,这里Himi创建的项目名字叫”ProjectForBuyTest“,点击你的App进入如下界面:
(注意:这里的Bundle ID一定要跟你的项目中的info.plist中的Bundle ID保证一致!!!!)
这里可以管理你的项目的信息、状态、是否嵌入GameCenter等等选项,那么本章我们重点介绍如何使用IAp沙盒测试程序内付费,所以这里我们点击右上角的”Manage In-App Purchases“选项进入创建产品(游戏道具)界面如下:
上图中的下方看到Himi创建过的四个产品(道具)了,你可以点击”Create New“选项新建一个产品(付费道具),点击新建如下界面:
上图中Himi没有截图出所有的选项,这里大概介绍下,这个界面是选择你的消费道具的种类,种类说明如下:
类型选择有四种选择:
1.Consumable(消耗品): 每次下载都需要付费;
2.Non-consumable(非消耗品): 仅需付费一次;
3.Auto-Renewable Subscriptions:自动订阅;
4.Free Subscription:免费订阅
最下方是你沙盒测试的截图,暂且不管即可;
这里Himi选择Consumable选项,比如很多游戏都是购买金币啦这样子就可以选择这个;然后出现如下界面:
Reference Name: 付费产品(道具的)参考名称
Product ID(产品ID): 你产品的唯一id。通常格式是 com.xx.yy,但它可以是任何形式,不要求以程序的App ID作为前缀。
Add Language: 添加产品名称与描述语言;
Price Tier:选择价格,这里你选择价格后,会出现如上图最下方的价格对照表
Screenshot(截屏): 展示你产品的截屏。(这个直接无视,测试App务必要管这个的)
Product ID(产品ID)可以创建多个,比如我想游戏中分为0.99$ 、1.99$等道具那就创建对应多个产品ID!
我们填写好了”Reference Name“与”Product ID“以及”Price Tier“后,点击”Add Language“选项然后出现如下界面:
上图中的选项:
Language:语言
Displayed Name(显示名称): 用户看到的产品名称。
Description(描述): 对产品进行描述。
Ok,一路 Save保存回到”Manage In-App Purchases“界面中会看到我们新建的产品(道具)如下:
大家可以看到新建的产品(道具)ID:这里Himi创建的产品ID是com.himi.wahaha ,这里要记住这个产品ID哦~
第二步:申请测试账号,利用沙盒测试模拟AppStore购买道具流程!
回到itunesconnect主页中,选择“Manage Users”然后选择“Test User”,然后出现的界面如下图:
这里Himi已经创建了两个测试账号了,点击界面中的 “Add New User”进行创建即可;记住账号和密码哈,记不住就删掉重新建 娃哈哈~(切记:不能用于真正的AppStore中使用此账号,不仅不能用,而且一旦AppStore发现后果你懂得~)
第三步:在项目中申请购买产品代码以及监听;
这里关于购买的代码部分呢,我都有备注的,Himi这里就不详细讲解了,Himi只是在代码后介绍几点值得注意的地方:
这里Himi是新建的一个Cocos2d的项目,然后给出HelloWorldLayer.h以及HelloWorldLayer.m的全部代码,所有购买代码也全在里面也对应有Himi的注释!
HelloWorldLayer.h
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
|
//
// HelloWorldLayer.h
// buytest
//
// Created by 华明 李 on 11-10-29.
// Copyright Himi 2011年. All rights reserved.
//
// When you import this file, you import all the cocos2d classes
#import "cocos2d.h"
#import
#import
enum
{
IAP0p99=10,
IAP1p99,
IAP4p99,
IAP9p99,
IAP24p99,
}buyCoinsTag;
@interface HelloWorldLayer : CCLayer
{
int
buyType;
}
+(CCScene *) scene;
- (
void
) requestProUpgradeProductData;
-(
void
)RequestProductData;
-(
bool
)CanMakePay;
-(
void
)buy:(
int
)type;
- (
void
)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions;
-(
void
) PurchasedTransaction: (SKPaymentTransaction *)transaction;
- (
void
) completeTransaction: (SKPaymentTransaction *)transaction;
- (
void
) failedTransaction: (SKPaymentTransaction *)transaction;
-(
void
) paymentQueueRestoreCompletedTransactionsFinished: (SKPaymentTransaction *)transaction;
-(
void
) paymentQueue:(SKPaymentQueue *) paymentQueue restoreCompletedTransactionsFailedWithError:(NSError *)error;
- (
void
) restoreTransaction: (SKPaymentTransaction *)transaction;
-(
void
)provideContent:(NSString *)product;
-(
void
)recordTransaction:(NSString *)product;
@end
|
HelloWorldLayer.m
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
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
|
//
// IapLayer.m
//
// Created by Himi on 11-5-25.
// Copyright 2011年 李华明 . All rights reserved.
//
#import "HelloWorldLayer.h"
#define ProductID_IAP0p99 @"com.buytest.one"//$0.99
#define ProductID_IAP1p99 @"com.buytest.two" //$1.99
#define ProductID_IAP4p99 @"com.buytest.three" //$4.99
#define ProductID_IAP9p99 @"com.buytest.four" //$19.99
#define ProductID_IAP24p99 @"com.buytest.five" //$24.99
@implementation HelloWorldLayer
+(CCScene *) scene
{
CCScene *scene = [CCScene node];
HelloWorldLayer *layer = [HelloWorldLayer node];
[scene addChild: layer];
return
scene;
}
-(id)init
{
if
((self = [super init])) {
CGSize size = [[CCDirector sharedDirector] winSize];
CCSprite *iap_bg = [CCSprite spriteWithFile:@
"Icon.png"
];
[iap_bg setPosition:ccp(size.width/2,size.height/2)];
[self addChild:iap_bg z:0];
//---------------------
//----监听购买结果
[[SKPaymentQueue defaultQueue] addTransactionObserver:self];
//申请购买
/*
enum{
IAP0p99=10,
IAP1p99,
IAP4p99,
IAP9p99,
IAP24p99,
}buyCoinsTag;
*/
[self buy:IAP24p99];
}
return
self;
}
-(
void
)buy:(
int
)type
{
buyType = type;
if
([SKPaymentQueue canMakePayments]) {
//[[SKPaymentQueue defaultQueue] restoreCompletedTransactions];
[self RequestProductData];
CCLOG(@
"允许程序内付费购买"
);
}
else
{
CCLOG(@
"不允许程序内付费购买"
);
UIAlertView *alerView = [[UIAlertView alloc] initWithTitle:@
"Alert"
message:@
"You can‘t purchase in app store(Himi说你没允许应用程序内购买)"
delegate:nil cancelButtonTitle:NSLocalizedString(@
"Close(关闭)"
,nil) otherButtonTitles:nil];
[alerView show];
[alerView release];
}
}
-(
bool
)CanMakePay
{
return
[SKPaymentQueue canMakePayments];
}
-(
void
)RequestProductData
{
CCLOG(@
"---------请求对应的产品信息------------"
);
NSArray *product = nil;
|