2011-10-27 29 views
18

यह "इन-ऐप खरीदारी के साथ अमान्य उत्पाद आईडी समस्या को हल करना?

पर एक फॉलो-अप प्रश्न है, मुझे एक समान समस्या है और एमकेस्टोरकिट के साथ और बिना दोनों करने की कोशिश की है और एक समान संदेश प्राप्त करें।

चेक-सूची

करने के लिए धन्यवाद के साथ: http://troybrant.net/blog/2010/01/invalid-product-ids/

आप इन-ऐप आपकी ऐप्लिकेशन आईडी के लिए की गई खरीदारी सक्षम है?

हाँ

आप अपने उत्पाद के लिए बिक्री के लिए उपलब्ध जांच की है?

हाँ

आपके द्वारा भेजी (और वैकल्पिक को अस्वीकार कर दिया) अपने आवेदन द्विआधारी है?

हाँ

अपने प्रोजेक्ट की .plist बंडल आईडी अपनी ऐप्लिकेशन आईडी मेल खाता है?

हाँ

आप उत्पन्न और नए एप्लिकेशन ID के लिए एक नया प्रावधान प्रोफ़ाइल स्थापित है?

हाँ

आप इस नए प्रावधान प्रोफ़ाइल का उपयोग कर कोड पर हस्ताक्षर करने के लिए अपनी परियोजना के लिए कॉन्फ़िगर किया गया है?

हाँ

आप iPhone OS 3.0 या इसके बाद के संस्करण के लिए निर्माण कर रहे हैं?

हाँ। आईओएस 4.2 और ऊपर।

क्या आप SKProductRequest बनाते समय पूर्ण उत्पाद आईडी का उपयोग कर रहे हैं?

हाँ। इसके अलावा केवल उत्पाद आईडी रिवर्स डोमेन

क्या आपने अपने उत्पाद को आईट्यून्स कनेक्ट में जोड़ने के बाद कई घंटे इंतजार किया है?

हाँ। यह "समीक्षा की प्रतीक्षा कर रहा है" और पिछले 4-5 दिनों के लिए किया गया है

क्या आपके बैंक विवरण आईट्यून्स कनेक्ट पर सक्रिय हैं?

नहीं। यह एक क्लाइंट प्रोजेक्ट है और यह देखने के लिए केवल परीक्षण कर रहा है कि यह काम कर रहा है या नहीं। क्या मुझे इसका परीक्षण करने के लिए बैंक विवरण चाहिए?

संपादित करें: मैंने इसे अभी बदल दिया है। लेकिन मुझे नहीं लगता कि मुझे सैंडबॉक्सिंग का परीक्षण करने के लिए ऐसा क्यों करना है।

क्या आपने ऐप को अपने डिवाइस से हटाने और पुनर्स्थापित करने का प्रयास किया है?

हाँ

अपने डिवाइस jailbroken है?

नहीं


अनुप्रयोग अंकन सही

कुछ उदाहरण मैं इस संकेतन का उपयोग देखा है: com.domain.APP_ID.PRODUCT_TO_BUY

लेकिन दूसरों कॉम का उपयोग करें। डोमेन। PRODUCT_TO_BUY

कौन सा सही है?

मेरे कोड में मैंने पूर्ण नोटेशन और केवल उत्पाद आईडी का उपयोग करने का प्रयास किया है, लेकिन फिर भी "अवैध उत्पाद आईडी" की एक ही समस्या है।

डेवलपर

अनुप्रयोग बंडल (रिलीज) को अस्वीकार कर दिया iTunes कनेक्ट पर है और मैं "डेवलपर को अस्वीकार कर दिया" है बंडल।

चित्र: App developer rejected

समीक्षा के लिए प्रतीक्षा कर रहा है?

मेरी इन-ऐप खरीदारियों में मेरे पास 1 उत्पाद है, एक ऑटो-नवीकरणीय सदस्यता है। इसे बिक्री के लिए मंजूरी दे दी गई है; हालांकि यह "समीक्षा की प्रतीक्षा कर रहा है" और हरा-प्रकाश नहीं है।

चित्र:

waiting for review

मैं इस बनाया लगभग 4-5 दिन पहले और उसके अभी भी "समीक्षा के लिए प्रतीक्षारत" के रूप में चिह्नित ??

मुझे आश्चर्य है कि मेरा ऐप "डेवलपर अस्वीकार कर दिया गया है" क्या इसका ऑटो-नवीकरणीय सदस्यता पर "समीक्षा की प्रतीक्षा" पर असर पड़ता है?

मैंने इस आइटम में कुछ भी नहीं बदला है।

विभिन्न लेखों के मुताबिक मुझे इसका उपयोग करने से पहले 24-48 घंटे इंतजार करना होगा?

लेकिन क्या मुझे इसे अपने परीक्षण में उपयोग करने से पहले इसे स्वीकार करने या हरे-जलाए जाने की प्रतीक्षा करनी है?

बैंक विवरण

मैं किसी भी बैंक विवरण भरा नहीं है क्योंकि यह एक ग्राहक के लिए एक अनुप्रयोग है - मैं बैंक विवरण में भरने के लिए इससे पहले कि मैं यह परीक्षण जारी रख सकते हैं की जरूरत है?

इन दस्तावेज़ों के अनुसार: http://developer.apple.com/library/ios/#technotes/tn2259/_index.html बैंक विवरण आवश्यक हैं?

क्या मुझे ऐप चलाने से पहले एक परीक्षण खाते के तहत अपने डिवाइस पर आईट्यून्स में लॉग इन करने की आवश्यकता है?

मुझे आश्चर्य है कि कोई इन मुद्दों को स्पष्ट कर सकता है या नहीं? शायद यह ऐप-ऐप खरीद के लिए "हरा जला" होने की प्रतीक्षा के रूप में उतना आसान है, या शायद मैंने एक कदम याद किया है?

नोट: यह एमकेस्टोरकिट का उपयोग करने या निम्नानुसार कोड का उपयोग करने के बावजूद होता है।

धन्यवाद।

मेरे कोड (इस गैर MKStoreKit संस्करण है)

#define kMySubscriptionFeature @"uk.co.samplewebsite.myappproject.sub1" 

    - (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view from its nib. 
    self.title = @"Manage Subscriptions"; 


    if ([SKPaymentQueue canMakePayments]) 
    { 
     // Display a store to the user. 

     //[MKStoreManager sharedManager]; 
     //NSLog(@"purhcasable = %@", [[MKStoreManager sharedManager] purchasableObjectsDescription]); 
     [self requestProUpgradeProductData]; 

    } 
    else 
    { 
     // Warn the user that purchases are disabled. 
     NSString *message = @"In-app purchases are disabled. Please review your settings"; 
     UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Error" message:message delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil]; 
     [alertView show]; 
     [alertView release]; 
    } // end if 
} 


#pragma mark - StoreKit Delegate 

- (void) requestProductData 
{ 
    SKProductsRequest *request= [[SKProductsRequest alloc] initWithProductIdentifiers: [NSSet setWithObject:kMySubscriptionFeature]]; 
    request.delegate = self; 
    [request start]; 
} 

- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response 
{ 
    NSArray *myProduct = [[NSArray alloc] initWithArray:response.products]; 

    for(SKProduct *item in myProduct) 
    { 

     NSLog(@"Product title: %@" , item.localizedTitle); 
     NSLog(@"Product description: %@" , item.localizedDescription); 
     NSLog(@"Product price: %@" , item.price); 
     NSLog(@"Product id: %@" , item.productIdentifier); 
    } 


    for (NSString *invalidProductId in response.invalidProductIdentifiers) 
    { 
     NSLog(@"Problem in iTunes connect configuration for product: %@" , invalidProductId); 
    } 


    [myProduct release]; 

    // populate UI 
    [request autorelease]; 
} 

संपादित करें:

एक फेलसेफ के रूप में, मैं सिर्फ मामले में बैंक विवरण चुके हैं, लेकिन मैं नहीं दिख रहा है क्यों यह होगा एक मुद्दा का कारण बनता है।

मैंने यह भी सुनिश्चित किया है कि मैंने ऐप रिलीज बंडल को अपलोड और अस्वीकार कर दिया है और विज्ञापन नहीं है; हालांकि मुझे नहीं पता कि इससे कोई फर्क पड़ता है या नहीं।

उत्तर

6

मुझे लगता है कि मैंने इसे अभी किया है। मैं बस सुनिश्चित करने के लिए कुछ परीक्षण चलाने जा रहा हूँ।

यह अभी तक स्वीकार नहीं किया जा रहा है; मैं विभिन्न स्टोरकिट फ्रेमवर्क के साथ कुछ परीक्षण चला रहा हूं।

मेरे उत्पादन:

2011-10-27 15:17:49.297 My Simple App[7376:707] productsRequest 
2011-10-27 15:17:49.298 My Simple App[7376:707] Product title: Simple subscription 
2011-10-27 15:17:49.299 My Simple App[7376:707] Product description: Subscribe and get the latest content to your iPhone or iPod Touch device 
2011-10-27 15:17:49.299 My Simple App[7376:707] Product price: 2.99 
2011-10-27 15:17:49.300 My Simple App[7376:707] Product id: sub1 

यहाँ मैं क्या किया है।

  1. मैंने अपने बैंक विवरण जोड़े। मुझे अभी भी नहीं लगता कि इसका इसके साथ कुछ लेना देना है।

  2. नोट। ऐप की इन-एप खरीद अभी भी "समीक्षा की प्रतीक्षा कर रही है" और मुझे उपरोक्त आउटपुट मिला।

  3. मैं बदले गए:

    #define kMySubscriptionFeature @"uk.co.somesite.someapp.sub1"

साथ:

#define kMySubscriptionFeature @"sub1" 

मैं MKStoreKit साथ और अन्य चौखटे के साथ कुछ परीक्षण चलाने के लिए करता है, तो यह ठीक है देखने के लिए जा रहा हूँ।

कोड मैं का इस्तेमाल किया नीचे, सुरक्षा कारणों से संपादित किया जाता है:

ज फ़ाइल

// ManageSubscriptionsVC.h 
// This doesn't have visual output, just NSLog at the moment 
// This doesn't use MKStoreKit yet 

#import <UIKit/UIKit.h> 
#import "StoreKit/StoreKit.h" 

#define kMySubscriptionFeature @"sub1" 

/* 
Shared Secret 

A shared secret is a unique code that you should use when you make the 
call to our servers for your In-App Purchase receipts. 
Without a shared secret, you will not be able to test auto-renewable 
In-App Purchase subscriptions in the sandbox mode. 

Also note that you will not be able to make them available 
on the App Store. 

Note: Regardless of what app they are associated with, 
all of your auto-renewable subscriptions will use this 
same shared secret. 
*/ 
#define sharedSecret @"PUTSHAREDSECRETHERE" 


@interface ManageSubscriptionsVC : UIViewController 
<SKProductsRequestDelegate, SKProductsRequestDelegate, SKPaymentTransactionObserver> 
{ 
    SKProduct *proUpgradeProduct; 
    SKProductsRequest *productsRequest; 
} 

- (void)requestProUpgradeProductData; 

@end 

मीटर फ़ाइल

// 
// ManageSubscriptionsVC.m 

#import "ManageSubscriptionsVC.h" 

@implementation ManageSubscriptionsVC 

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil 
{ 
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; 
    if (self) { 
     // Custom initialization 
    } 
    return self; 
} 

- (void)didReceiveMemoryWarning 
{ 
    // Releases the view if it doesn't have a superview. 
    [super didReceiveMemoryWarning]; 

    // Release any cached data, images, etc that aren't in use. 
} 

#pragma mark - View lifecycle 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view from its nib. 
    self.title = @"Manage Subscriptions"; 


    if ([SKPaymentQueue canMakePayments]) 
    { 
     // Display a store to the user. 

     //[MKStoreManager sharedManager]; 
     //NSLog(@"purhcasable = %@", [[MKStoreManager sharedManager] purchasableObjectsDescription]); 
     [self requestProUpgradeProductData]; 

    } 
    else 
    { 
     // Warn the user that purchases are disabled. 
     NSString *message = @"In-app purchases are disabled. Please review your settings"; 
     UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Error" message:message delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil]; 
     [alertView show]; 
     [alertView release]; 
    } // end if 
} 

- (void)viewDidUnload 
{ 
    [super viewDidUnload]; 
    // Release any retained subviews of the main view. 
    // e.g. self.myOutlet = nil; 
} 

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 
{ 
    // Return YES for supported orientations 
    return (interfaceOrientation == UIInterfaceOrientationPortrait); 
} 

#pragma mark - StoreKit Delegate 

- (void) requestProductData 
{ 
    NSLog(@"requestProductData"); 
    SKProductsRequest *request= [[SKProductsRequest alloc] initWithProductIdentifiers: [NSSet setWithObject:kMySubscriptionFeature]]; 
    request.delegate = self; 
    [request start]; 
} 

- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response 
{ 
    NSLog(@"productsRequest"); 

    NSArray *myProduct = [[NSArray alloc] initWithArray:response.products]; 

    for(SKProduct *item in myProduct) 
    { 

     NSLog(@"Product title: %@" , item.localizedTitle); 
     NSLog(@"Product description: %@" , item.localizedDescription); 
     NSLog(@"Product price: %@" , item.price); 
     NSLog(@"Product id: %@" , item.productIdentifier); 


    } 

    /* 
    for(NSString *invalidProduct in response.invalidProductIdentifiers) 
     NSLog(@"Problem in iTunes connect configuration for product: %@", invalidProduct); 
    */ 

    for (NSString *invalidProductId in response.invalidProductIdentifiers) 
    { 
     NSLog(@"Problem in iTunes connect configuration for product: %@" , invalidProductId); 
    } 


    [myProduct release]; 

    // populate UI 
    [request autorelease]; 
} 

#pragma mark - PaymentQueue 

-(void)paymentQueue:(SKPaymentQueue *)queue removedTransactions:(NSArray *)transactions 
{ 
} 

-(void)paymentQueue:(SKPaymentQueue *)queue restoreCompletedTransactionsFailedWithError:(NSError *)error 
{ 
} 

-(void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions 
{ 
} 

-(void)paymentQueueRestoreCompletedTransactionsFinished:(SKPaymentQueue *)queue 
{ 
} 

#pragma mark - Other 


- (void)requestProUpgradeProductData 
{ 
    NSSet *productIdentifiers = [NSSet setWithObject:kMySubscriptionFeature]; 
    productsRequest = [[SKProductsRequest alloc] initWithProductIdentifiers:productIdentifiers]; 
    productsRequest.delegate = self; 
    [productsRequest start]; 

    // we will release the request object in the delegate callback 
} 





@end 
11

इंतजार कर के 2 दिनों के बाद, नए एप्लिकेशन id, प्रोफाइल, इत्यादि। यह मेरे लिए तय किया गया ..

दस्तावेज़ com.iap.isrubbish वाक्यविन्यास का उपयोग क्यों करते हैं?

आपकी मदद

के लिए धन्यवाद मैं बदले गए:

kMySubscriptionFeature परिभाषित @ "uk.co.somesite.someapp.sub1" के साथ

:

परिभाषित kMySubscriptionFeature "@ sub1 "

+0

यह अंतिम चरण था जिसकी मुझे आवश्यकता थी। धन्यवाद –

+0

मैन, आपने मेरा दिन बनाया। मैं आपको एक बियर देना चाहता हूं :) –

+0

वाह ... मैंने एक पूरे सप्ताह गलती की तलाश में बिताया। मैंने 2 बंडलों को हटा दिया, नए बनाए, बस इसे खोजने के लिए बहुत सारे शोध किए। और यह काम किया ... मैं बस आप दोनों को गले लगाने के लिए चाहता हूँ। : डी –

1

मुझे अभी पता चला था जब मैंने ऐप खरीद में बनाया तो मैंने उत्पाद आईडी और संदर्भ नाम को बदल दिया, इसलिए मेरे मामले में मैं उत्पाद को खोजने और खोजने के लिए गलत स्ट्रिंग का उपयोग कर रहा था ... स्पॉट करना मुश्किल है।

1

मैं ऐप-खरीद में अपने मौजूदा, पूरी तरह से काम करने वाले ऐप के नवीनतम संस्करण का परीक्षण कर रहा था ताकि यह सुनिश्चित किया जा सके कि कार्यक्षमता अभी भी अपेक्षित रूप से काम कर रही है, जब मैंने आईट्यून्स कनेक्ट संदेश में समस्याएं देखना शुरू कर दिया था। मेरी समस्या थी (मैं भूल गया था) कि एमकेस्टोरकिट ने मेरे विभिन्न उपकरणों की चाबी पर खरीद के तथ्य को संग्रहीत किया है, भले ही मैं एक नया उपयोगकर्ता खाता उपयोग कर रहा था, फिर भी मेरा कीचेन डिवाइस को पहले ही खरीदा गया था। [स्वयं निकालें AllKeychainData] MKStoreManager के भीतर से समस्या को हल किया। उम्मीद है कि यह किसी को कुछ निराशा बचाता है।

0

मेरा मुद्दा था, मैंने असली सेब आईडी का उपयोग कर डिवाइस पर लॉग इन किया था। फिर साइन आउट (आईफोन-> सेटिंग्स -> ऐप स्टोर -> मेरा आईडी-> साइन आउट) फिर फिर से तैनात किया गया, और इसे फेंक दिया।

वेब पर सभी को धन्यवाद।