蘋果內(nèi)購那些事

在內(nèi)購項(xiàng)目中的那些奇葩事

一、 首先就是在自己的開發(fā)者賬號中設(shè)置的一些亂七八糟的東西,在我們公司這些東西都是運(yùn)營的哥哥姐姐們搞得,不過在其它的博客中也有詳細(xì)的說明,我也不再多說晦闰。

注意:在開始擼代碼的時(shí)候銀行卡的一些稅務(wù)信息必須是通過蘋果審核通過的,否則是無法擼代碼進(jìn)行測試的唉铜。

二、 接下來就是搞代碼的時(shí)候了:

1农渊、 #import <StoreKit/StoreKit.h>導(dǎo)入文件
2贝或、 <SKPaymentTransactionObserver,SKProductsRequestDelegate,SKRequestDelegate>這些代理協(xié)議是必須遵守的
3芝发、 在你的充值控制器里面自定義自己的方法
/**
 請求產(chǎn)品信息
 @param product prodect
 */
-(void)requestProductData:(NSString *)product;
/**
是否允許購買
 @param buy buy
 */
- (void)allowedBuy:(NSString *)buy;
/**
交易結(jié)果
 @param queue queue
 @param transactions ransactions
 * /
- (void)paymentQueue:(SKPaymentQueue *)queue         updatedTransactions:(NSArray *)transactions;
/**
 購買交易
 @param transaction transaction
 */
-(void) PurchasedTransaction: (SKPaymentTransaction *)transaction;
/**
 交易完成
 @param transaction transaction
 */
- (void) completeTransaction: (SKPaymentTransaction *)transaction;
/**
 交易失敗
@param transaction transaction
 */
- (void) failedTransaction: (SKPaymentTransaction *)transaction;
去實(shí)現(xiàn)這些方法
1.渡讼、在ViewDidLoad里面添加蘋果的監(jiān)聽
//添加蘋果支付監(jiān)聽
[[SKPaymentQueue defaultQueue] addTransactionObserver:self];
2骂束、 在dealloc里面接觸這個(gè)監(jiān)聽
[[SKPaymentQueue defaultQueue] removeTransactionObserver:self];//解除監(jiān)聽
3、 #pragma mark -- /*蘋果支付*/
/**
 是否允許購買
 @param buy buy
 */
- (void)allowedBuy:(NSString *)buy {
    if ([SKPaymentQueue canMakePayments]) {
        NSLog(@"允許程序內(nèi)購買此商品");
        [self requestProductData:buy];    
    }else {
        NSLog(@"不允許程序內(nèi)購買此商品");
    }
}
/**
 請求產(chǎn)品信息
 @param product prodect
 */
-(void)requestProductData:(NSString *)product {
    NSArray *productArray = @[product];
    NSSet *productSet = [NSSet setWithArray:productArray];//集合
    //開始請求
    SKProductsRequest *request = [[SKProductsRequest alloc] initWithProductIdentifiers:productSet];
    request.delegate = self;
    [request start];
}
/**
 收到產(chǎn)品的反饋信息
 @param request request
 @param response response
 */
- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response {
    NSArray *myProduct = response.products;
    SKProduct *p = nil;
    for (SKProduct *product in myProduct) {    
    p = product;
    }
    SKPayment *payment = [SKPayment paymentWithProduct:p];
    [[SKPaymentQueue defaultQueue] addPayment:payment];
}
/**
 請求失敗
 @param request request
 @param error error
 */
- (void)request:(SKRequest *)request didFailWithError:(NSError *)error {
    [self.loading stop];
    UIAlertController *alertController = [[UIAlertController alloc] init];
    UIAlertAction *errorAction = [UIAlertAction actionWithTitle:NSLocalizedString(@"Alert", NULL) style:UIAlertActionStyleCancel handler:nil];
    [alertController addAction:errorAction];
    [self presentViewController:alertController animated:YES completion:nil];
}
/**
 結(jié)束反饋
 @param request request
 */
- (void)requestDidFinish:(SKRequest *)request {
    NSLog(@"-----反饋結(jié)束-----");
}
/**
 交易結(jié)果
 @param queue queue
 @param transactions ransactions
 */
- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions {
    for (SKPaymentTransaction *transaction in transactions)
    {
        switch (transaction.transactionState)
        {
            case SKPaymentTransactionStatePurchased: {//交易完成
                [self completeTransaction:transaction];
            }
                break;
            case SKPaymentTransactionStateFailed: {
                //交易失敗
                [self failedTransaction:transaction];
            }
                break;
            case SKPaymentTransactionStateRestored: {    
            }
                break;
            case SKPaymentTransactionStatePurchasing:      //商品添加進(jìn)列表
                break;
            default:
                break;
        }
    }
}
/**
 購買交易
 @param transaction transaction
 */
-(void) PurchasedTransaction: (SKPaymentTransaction *)transaction {
    NSLog(@"-----購買交易----");
    NSArray *transactions =[[NSArray alloc] initWithObjects:transaction, nil];
    [self paymentQueue:[SKPaymentQueue defaultQueue] updatedTransactions:transactions];
}
/**
 交易完成
 @param transaction transaction
 */
- (void) completeTransaction: (SKPaymentTransaction *)transaction { 
    NSURL *recepitURL = [[NSBundle mainBundle] appStoreReceiptURL];
    NSData *receipt = [NSData dataWithContentsOfURL:recepitURL];
    NSDictionary *requestContents = @{
                                  @"receipt": [receipt base64EncodedStringWithOptions:0]
                                  };
    [[SKPaymentQueue defaultQueue] finishTransaction:transaction];
/*中間在這個(gè)地方做二次驗(yàn)證,可以去服務(wù)器驗(yàn)證也可以在客戶端完成驗(yàn)證,建議在服務(wù)器驗(yàn)證(但是時(shí)間稍微慢一點(diǎn)) 根據(jù)個(gè)人需求吧 */
}
/**
 交易失敗
 @param transaction transaction
 */
- (void) failedTransaction: (SKPaymentTransaction *)transaction     {    
    [self.loading stop];
    if (transaction.error.code != SKErrorPaymentCancelled)
{    
    }
    [[SKPaymentQueue defaultQueue] finishTransaction: transaction];
}

特別注意:
1成箫、 在提交審核的時(shí)候App內(nèi)購項(xiàng)目的產(chǎn)品名稱建議統(tǒng)一化,包括在購買界面的顯示問題展箱。否則被蘋果打回的可能性非常高??
2、 記得在內(nèi)購的地方上傳內(nèi)購的照片,有的app上傳的是購買列表的照片,有的app是上傳的購買成功的照片蹬昌。
3析藕、 具體是哪一張后續(xù)繼續(xù)更新??
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市凳厢,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌竞慢,老刑警劉巖先紫,帶你破解...
    沈念sama閱讀 206,214評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異筹煮,居然都是意外死亡遮精,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評論 2 382
  • 文/潘曉璐 我一進(jìn)店門败潦,熙熙樓的掌柜王于貴愁眉苦臉地迎上來本冲,“玉大人,你說我怎么就攤上這事劫扒∶识矗” “怎么了?”我有些...
    開封第一講書人閱讀 152,543評論 0 341
  • 文/不壞的土叔 我叫張陵沟饥,是天一觀的道長添怔。 經(jīng)常有香客問我湾戳,道長,這世上最難降的妖魔是什么广料? 我笑而不...
    開封第一講書人閱讀 55,221評論 1 279
  • 正文 為了忘掉前任砾脑,我火速辦了婚禮,結(jié)果婚禮上艾杏,老公的妹妹穿的比我還像新娘韧衣。我一直安慰自己,他們只是感情好购桑,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,224評論 5 371
  • 文/花漫 我一把揭開白布畅铭。 她就那樣靜靜地躺著,像睡著了一般其兴。 火紅的嫁衣襯著肌膚如雪顶瞒。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,007評論 1 284
  • 那天元旬,我揣著相機(jī)與錄音榴徐,去河邊找鬼。 笑死匀归,一個(gè)胖子當(dāng)著我的面吹牛坑资,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播穆端,決...
    沈念sama閱讀 38,313評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼袱贮,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了体啰?” 一聲冷哼從身側(cè)響起攒巍,我...
    開封第一講書人閱讀 36,956評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎荒勇,沒想到半個(gè)月后柒莉,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,441評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡沽翔,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,925評論 2 323
  • 正文 我和宋清朗相戀三年兢孝,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片仅偎。...
    茶點(diǎn)故事閱讀 38,018評論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡跨蟹,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出橘沥,到底是詐尸還是另有隱情窗轩,我是刑警寧澤,帶...
    沈念sama閱讀 33,685評論 4 322
  • 正文 年R本政府宣布座咆,位于F島的核電站品姓,受9級特大地震影響寝并,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜腹备,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,234評論 3 307
  • 文/蒙蒙 一衬潦、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧植酥,春花似錦镀岛、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至卸留,卻和暖如春走越,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背耻瑟。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評論 1 261
  • 我被黑心中介騙來泰國打工旨指, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人喳整。 一個(gè)月前我還...
    沈念sama閱讀 45,467評論 2 352
  • 正文 我出身青樓谆构,卻偏偏與公主長得像,于是被迫代替她去往敵國和親框都。 傳聞我的和親對象是個(gè)殘疾皇子搬素,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,762評論 2 345

推薦閱讀更多精彩內(nèi)容