рд╣рд╛рд▓ рд╣реА рдХреЗ рджрд┐рдиреЛрдВ рддрдХ, рд╣реИрдХрд┐рдВрдЧ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рдЦрд┐рд▓рд╛рдл рд╕реБрд░рдХреНрд╖рд╛ рдХреЗ рд▓рд┐рдП InApp рдЦрд░реАрдж рдПрдХ рдХрд╛рдлреА рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рддрдВрддреНрд░ рдерд╛ред рдЕрдЧрд░ рдбреЗрд╡рд▓рдкрд░ рдЪрд╛рд╣рддрд╛ рдерд╛ рдХрд┐ рдЙрд╕рдХрд╛ рдЖрд╡реЗрджрди рдЯреВрдЯреА рд╣реБрдИ рд▓рд╛рдЗрдиреЛрдВ рдХреА рд╕реВрдЪреА рдореЗрдВ рд╢рд╛рдорд┐рд▓ рди рд╣реЛ, рддреЛ рдЙрд╕рдиреЗ рдЗрд╕реЗ рдореБрдлреНрдд рдореЗрдВ рдмрд┐рдХреНрд░реА рдХреЗ рд╕рд╛рде рдЬрд╛рд░реА рдХрд░ рджрд┐рдпрд╛ред рд╕рд░реНрдХрд┐рдЯ рдиреЗ рдХрд╛рдо рдХрд┐рдпрд╛ред рд▓реЗрдХрд┐рди Cydia 'iAP Cracker' рдореЗрдВ рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреЗ рдмрд╛рдж - рд╕реНрдерд┐рддрд┐ рдмрджрд▓ рдЧрдИ рд╣реИред
рдмрд┐рд▓реНрд▓реА рдХреЗ рдиреАрдЪреЗ, рдПрдХ рд╡рд┐рдзрд┐ рдХрд╛ рд╡рд░реНрдгрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдЗрди рдкрдЯрд╛рдЦреЛрдВ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХрд╛рдиреВрдиреА рд░реВрдк рд╕реЗ рдХреИрд╕реЗ рд░реЛрдХрд╛ рдЬрд╛рдПред
рдореИрдВрдиреЗ рдЕрдкрдиреЗ рдЖрдИрдХреНрдпреВ рдкреНрд░реЛ рдПрдкреНрд▓реАрдХреЗрд╢рди рдХреЗ рдЖрдВрдХрдбрд╝реЛрдВ рдХреЛ рджреЗрдЦрдиреЗ рдХреЗ рдмрд╛рдж рдЗрдирдХ рдкрд░реНрдЪ рд╣реИрдХрд┐рдВрдЧ рдкреНрд░реЛрдЯреЗрдХреНрд╢рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрд╛ред рдпрд╣ рдПрдХ рдлреНрд░реАрдорд┐рдпрдо рдореЙрдбрд▓ рдкрд░ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред рдореЗрд░реЗ рдЖрдВрдХрдбрд╝реЛрдВ рдореЗрдВ, рдореИрдВрдиреЗ рдмрдбрд╝реА рдорд╛рддреНрд░рд╛ рдореЗрдВ рдмрд┐рдХреНрд░реА рджреЗрдЦреА - рдФрд░ рдПрдкреНрдкрд▓ рдХреЗ рдЖрдВрдХрдбрд╝реЛрдВ рдореЗрдВ, рд╕рдВрдЦреНрдпрд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ (рдмрд╣реБрдд рдХрдо) рдереАред рддрдм рдореИрдВрдиреЗ рдЗрд╕ рдмрд╛рдд рдХрд╛ рдкрд╛рд▓рди рдирд╣реАрдВ рдХрд┐рдпрд╛ рдХрд┐ рдХрд┐рд╕ рддрд░рд╣ рдХреЗ рдмреНрд░реЗрдХрд░ рд╣реИрдВред рд▓реЗрдХрд┐рди рдЬрдм рд▓реЛрдЧреЛрдВ рдиреЗ рд╕рдореАрдХреНрд╖рд╛рдУрдВ рдореЗрдВ рд▓рд┐рдЦрдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛ рдХрд┐ "рдЖрдИрдПрдкреА рдХреНрд░реИрдХрд░" рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ - рд╕рдм рдХреБрдЫ рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЧрдпрд╛ред
рдиреАрдЪреЗ рдмрддрд╛рдИ рдЧрдИ рд╕реБрд░рдХреНрд╖рд╛ рд╡рд┐рдзрд┐ рдЙрд╕ рддрдВрддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИ рдЬрд┐рд╕реЗ Apple рдЕрдкрдиреЗ рд╕рд░реНрд╡рд░ рд╕реЗ рдбреЗрдЯрд╛ рдХреА рдЬрд╛рдБрдЪ рдФрд░ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рддреЗ рд╕рдордп, рдмреЗрдЪрдиреЗ рдХреЗ рдмрд╛рдж рд╕реБрдЭрд╛рддрд╛ рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдореИрдВрдиреЗ рд░рд┐рдореЛрдЯ рдЪреЗрдХ рд╕реЗ рдЯрд┐рдХрдЯ рдЪреЗрдХ рдХреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рд╣реА рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рджрд┐рдпрд╛ред
MKStoreKit рдХрд╛ рдЙрдкрдпреЛрдЧ InApp рдЦрд░реАрдж рдХреЗ рд▓рд┐рдП рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдХрджрдо:
1. MKStoreManager.h рдореЗрдВ - #define SERVER_PRODUCT_MODEL 1 рдЪрд╛рд▓реВ рдХрд░реЗрдВ
2. рдореВрд▓ - (BOOL) рд╡реЗрд░рд┐рдлрд┐рдХреЗрд╢рди - рд╕рд╛рде рдмрджрд▓реЗрдВ:
- (BOOL)verifyReceipt:(NSData*)receiptData { //NSString *urlsting = @"https://sandbox.itunes.apple.com/verifyReceipt"; NSString *urlsting = @"https://buy.itunes.apple.com/verifyReceipt"; NSURL *url = [NSURL URLWithString:urlsting]; NSMutableURLRequest *theRequest = [NSMutableURLRequest requestWithURL:url]; NSString *st = [receiptData base64EncodingWithLineLength:[receiptData length]]; NSString *json = [NSString stringWithFormat:@"{\"receipt-data\":\"%@\"}", st]; [theRequest setHTTPBody:[json dataUsingEncoding:NSUTF8StringEncoding]]; [theRequest setHTTPMethod:@"POST"]; [theRequest setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"]; NSString *length = [NSString stringWithFormat:@"%d", [json length]]; [theRequest setValue:length forHTTPHeaderField:@"Content-Length"]; NSHTTPURLResponse* urlResponse = nil; NSError *error = [[NSError alloc] init]; NSData *responseData = [NSURLConnection sendSynchronousRequest:theRequest returningResponse:&urlResponse error:&error]; NSString *responseString = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding]; NSDictionary *dic = [responseString JSONValue]; NSInteger status = [[dic objectForKey:@"status"] intValue]; BOOL retVal = NO; if (status == 0) { retVal = YES; } return retVal; }
3. рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдП JSON рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдЬреЛрдбрд╝реЗрдВ (http://code.google.com/p/json-framework)
4. рд╕рдм рдХреБрдЫ
рдХреНрдпрд╛ рдЪрд▓ рд░рд╣рд╛ рд╣реИ:
рд░рд╕реАрдж рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж - рдпрд╣ рдлрд┐рд░ рд╕реЗ рд╕рддреНрдпрд╛рдкрди рдХреЗ рд▓рд┐рдП рдРрдкреНрдкрд▓ рд╕рд░реНрд╡рд░ рдкрд░ рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдЬрд╡рд╛рдм рд╕реЗ рдЖрдк рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рдм рдХреБрдЫ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред
рдкреБрдирд╢реНрдЪ рд╡рд┐рдзрд┐ "рд╕рд░реНрд╡рд╢реНрд░реЗрд╖реНрда" рд╣реЛрдиреЗ рдХрд╛ рджрд╛рд╡рд╛ рдирд╣реАрдВ рдХрд░рддреА рд╣реИред рдпрджрд┐ рдЖрдк, рд╕рд╣рдХрд░реНрдорд┐рдпреЛрдВ рдХреА рдЯрд┐рдкреНрдкрдгреА рдФрд░ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рд╡рд┐рдЪрд╛рд░ рд╣реИрдВ - рд▓рд┐рдЦреЗрдВред