iOS內(nèi)購

內(nèi)購流程

一本讥、填寫協(xié)議,稅務(wù)和銀行業(yè)務(wù)

1应媚、登錄登錄 https://appstoreconnect.apple.com严沥,選擇進入App Store Connect。
2中姜、進入“協(xié)議消玄、稅務(wù)和銀行業(yè)務(wù)”
3、內(nèi)購用的是付費應(yīng)用程序丢胚,先簽署《付費應(yīng)用程序協(xié)議》翩瓜,同意后狀態(tài)變更為“用戶信息待處理”,等待審核携龟。
4兔跌、狀態(tài)更改完畢后,點擊“開始設(shè)置稅務(wù)峡蟋、銀行業(yè)務(wù)和聯(lián)系信息”坟桅。
  a.添加銀行賬戶,按照要求填寫相關(guān)內(nèi)容即可华望。
  b.選擇報稅表,并填寫仅乓。(我是可愛的中國公民赖舟,在美國有沒有商業(yè)活動,      所以我填的是否夸楣。)
然后繼續(xù)填寫報稅表宾抓,按照填寫要求填寫就行了(要是英文閱讀有點困難,那就雙擊網(wǎng)頁豫喧,應(yīng)該會有翻譯成中文的功能石洗;沒有的話,那就詞典紧显。讲衫。。你懂得鸟妙,哈哈哈)焦人, 我是個人開發(fā)者賬戶相對公司開發(fā)者賬戶填的會少一點,不過沒關(guān)系重父。都是一些基本信息。
   c.填寫聯(lián)系信息忽匈,一共5個房午。高級管理、財務(wù)丹允、技術(shù)郭厌、法務(wù)、營銷(可重復(fù)雕蔽,像我這種人才就是5個職位都是我折柠,開玩笑的,勿當(dāng)真)批狐。
5扇售、稅務(wù)表填完了之后,點擊“我的APP”嚣艇,進入到項目APP的信息頁承冰,點擊功能,在彈出的頁面點擊App內(nèi)購買項目后面的+食零。
創(chuàng)建完成之后 填寫內(nèi)購買項目信息困乒、
信息填寫完成了點擊右上角的 “存儲”,然后點擊左邊 “App 內(nèi)購買項目”贰谣。出現(xiàn)“元數(shù)據(jù)丟失”說明里面信息沒填寫完整娜搂,在點進去填寫迁霎。直到顯示“準(zhǔn)備提交”。
6百宇、添加沙箱測試人員
7考廉、我們需要在工程里配置好證書,測試證書是必須的因為我們內(nèi)購需要連接到蘋果的App Store的恳谎,需要正式的測試證書才能測試芝此,同時把下圖工程中的這一配置打開

二、代碼部分

#import <StoreKit/StoreKit.h>

@interface LLMIneCoinRechargeController ()<UIAlertViewDelegate,SKProductsRequestDelegate,SKPaymentTransactionObserver>

@property(nonatomic, strong)NSArray<LLMIneCoinRechargeModel *> *coinModelArr;

@property(nonatomic,copy)NSString * bvip;

@property(nonatomic,copy)NSString * coin;

@property(nonatomic, strong)SKProductsRequest *request;

@property(nonatomic,copy)NSString * productID;
@implementation LLMIneCoinRechargeController{
    
    UIAlertView* _alertView;
    NSString *coinStr;
}


- (void)viewDidLoad {
    [super viewDidLoad];
    //一定要 開啟內(nèi)購檢測
    [[SKPaymentQueue defaultQueue]addTransactionObserver:self];

}

// 在點擊事件中去添加代碼
- (void)payBtnClick:(UIButton *)sender{
    
    __block  LLMIneCoinRechargeModel *model = nil;
    
    [self.coinModelArr enumerateObjectsUsingBlock:^(LLMIneCoinRechargeModel * obj, NSUInteger idx, BOOL * _Nonnull stop) {
        if (obj.selected) {
            model = obj;
        }
    }];
    if (!model) {
        [HudManager showMessage:@"請選擇金額"];
        return;
    }
    
    NSString *proID = [NSString stringWithFormat:@"charge%@",model.coinID];
    
    WS(weakSelf);
    if ([SKPaymentQueue canMakePayments]) {
        [weakSelf requestProductData:proID];
        weakSelf.productID = proID;
        
    }else{
        [HudManager showMessage:@"不允許程序內(nèi)付費"];
    
    }
}

// 收到請求信息
- (void)requestProductData:(NSString *)productID{

    NSLog(@"-------------請求對應(yīng)的產(chǎn)品信息----------------");
    
    [SVProgressHUD showWithStatus:nil maskType:SVProgressHUDMaskTypeBlack];
    
    NSArray *product = [[NSArray alloc] initWithObjects:productID,nil];
    
    NSSet *nsset = [NSSet setWithArray:product];
    _request = [[SKProductsRequest alloc]initWithProductIdentifiers:nsset];
    
    _request.delegate = self;
    
    [_request start];
}


// 收到返回信息

- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response{

    NSArray *product = response.products;
    
    if (product.count == 0) {
        
        [SVProgressHUD dismiss];
        [HudManager showMessage:@"購買失敗"];
        return;
    }
    
    SKProduct *prod = nil;
    for (SKProduct *pro in product) {
        
        if ([pro.productIdentifier isEqualToString:self.productID]) {
            prod = pro;
        }
    }
    
    // 發(fā)送購買請求
    if (prod != nil) {
        SKPayment *payment = [SKPayment paymentWithProduct:prod];
        [[SKPaymentQueue defaultQueue]addPayment:payment];
    }
}

// 失敗回調(diào)
- (void)request:(SKRequest *)request didFailWithError:(NSError *)error{
    
    [SVProgressHUD dismiss];
    [HudManager showMessage:@"購買失敗"];
    
}

// 支付后的反饋信息
- (void)requestDidFinish:(SKRequest *)request{

    [SVProgressHUD dismiss];
    
}

// 監(jiān)聽購買結(jié)果
- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray<SKPaymentTransaction *> *)transactions{
    
    for (SKPaymentTransaction *tran in transactions) {
        
        switch (tran.transactionState) {
                
            case SKPaymentTransactionStatePurchased:
                
                [self verifyPurchaseWithPaymentTransactionWith:tran];
                
                break;
            case SKPaymentTransactionStatePurchasing:
                NSLog(@"商品已經(jīng)添加進列表");
                break;
                
            case SKPaymentTransactionStateRestored:
                NSLog(@"已經(jīng)購買過商品");
                
                [[SKPaymentQueue defaultQueue] finishTransaction:tran];
                
                break;
            case SKPaymentTransactionStateFailed:
                
                NSLog(@"購買失敗");
                [[SKPaymentQueue defaultQueue] finishTransaction:tran];
                [HudManager showMessage:@"購買失敗"];
                
                break;
            default:
                break;
        }
    }
}

/**
 *  驗證購買因痛,避免越獄軟件模擬蘋果請求達到非法購買問題
 *
 */
-(void)verifyPurchaseWithPaymentTransactionWith:(SKPaymentTransaction *)tran{
    
    //從沙盒中獲取交易憑證并且拼接成請求體數(shù)據(jù)
    NSURL *receiptUrl=[[NSBundle mainBundle] appStoreReceiptURL];
    NSData *receiptData=[NSData dataWithContentsOfURL:receiptUrl];

    NSString  *receiptString = [receiptData base64EncodedStringWithOptions:0];
    
    if (!receiptString) {
        return;
    }

// 將base64 編碼 發(fā)給后臺服務(wù)器 做驗證 以及是否是沙箱環(huán)境的參數(shù)
    
    NSDictionary *dict = [NSDictionary universalParameteWithDictionary:@{@"receipt":receiptString,
                                                                         @"sandbox":BOOLSandBox,
                                                                         }];
    
    [[LFBHTTPSessionManager manager]POSTwithURLString:KApplePay_Docheck parameters:dict success:^(id data) {
        
        [self loadData];
        [[SKPaymentQueue defaultQueue] finishTransaction:tran];
        
        
    } failed:^(NSError *error) {
//        [HudManager showMessage:error.description];
    }];
   
}


- (void)dealloc{
    
    [[SKPaymentQueue defaultQueue] removeTransactionObserver:self];
    
}

三婚苹、注意事項

1.接入內(nèi)購后把支付寶、微信支付的SDK刪掉鸵膏,蘋果那邊能掃出來(因為這個原因我被拒過)膊升。

2.內(nèi)購商品是和項目一起提交然后審核過了商品才有效!

3.測試內(nèi)購一定要用真機測試谭企,商品信息如果無效廓译,一般是 商品還沒有審核通過 !

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末债查,一起剝皮案震驚了整個濱河市非区,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌盹廷,老刑警劉巖征绸,帶你破解...
    沈念sama閱讀 221,406評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異俄占,居然都是意外死亡管怠,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,395評論 3 398
  • 文/潘曉璐 我一進店門缸榄,熙熙樓的掌柜王于貴愁眉苦臉地迎上來渤弛,“玉大人,你說我怎么就攤上這事甚带∷希” “怎么了?”我有些...
    開封第一講書人閱讀 167,815評論 0 360
  • 文/不壞的土叔 我叫張陵欲低,是天一觀的道長辕宏。 經(jīng)常有香客問我,道長砾莱,這世上最難降的妖魔是什么瑞筐? 我笑而不...
    開封第一講書人閱讀 59,537評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上聚假,老公的妹妹穿的比我還像新娘块蚌。我一直安慰自己,他們只是感情好膘格,可當(dāng)我...
    茶點故事閱讀 68,536評論 6 397
  • 文/花漫 我一把揭開白布峭范。 她就那樣靜靜地躺著,像睡著了一般瘪贱。 火紅的嫁衣襯著肌膚如雪纱控。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,184評論 1 308
  • 那天菜秦,我揣著相機與錄音甜害,去河邊找鬼。 笑死球昨,一個胖子當(dāng)著我的面吹牛尔店,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播主慰,決...
    沈念sama閱讀 40,776評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼嚣州,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了共螺?” 一聲冷哼從身側(cè)響起该肴,我...
    開封第一講書人閱讀 39,668評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎藐不,沒想到半個月后沙庐,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,212評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡佳吞,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,299評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了棉安。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片底扳。...
    茶點故事閱讀 40,438評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖贡耽,靈堂內(nèi)的尸體忽然破棺而出衷模,到底是詐尸還是另有隱情,我是刑警寧澤蒲赂,帶...
    沈念sama閱讀 36,128評論 5 349
  • 正文 年R本政府宣布阱冶,位于F島的核電站,受9級特大地震影響滥嘴,放射性物質(zhì)發(fā)生泄漏木蹬。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,807評論 3 333
  • 文/蒙蒙 一若皱、第九天 我趴在偏房一處隱蔽的房頂上張望镊叁。 院中可真熱鬧尘颓,春花似錦、人聲如沸晦譬。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,279評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽敛腌。三九已至卧土,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間像樊,已是汗流浹背尤莺。 一陣腳步聲響...
    開封第一講書人閱讀 33,395評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留凶硅,地道東北人缝裁。 一個月前我還...
    沈念sama閱讀 48,827評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像足绅,于是被迫代替她去往敵國和親捷绑。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,446評論 2 359

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

  • 什么是內(nèi)購 首先得分清楚 內(nèi)購和Apple Pay氢妈。 一粹污、Apple Pay:是一種支付方式,跟支付寶首量、微信支付是...
    NeverGiveUp丶FCC閱讀 55,398評論 32 78
  • 內(nèi)購:只要在iPhone App上購買的不是實物產(chǎn)品(也就是虛擬產(chǎn)品如游戲幣壮吩,yy幣,qq幣加缘,即各個平臺定的自使用...
    心如止水的魚閱讀 2,344評論 0 0
  • 內(nèi)購所需要的資料整理總結(jié)鸭叙。引用大佬的經(jīng)典文章:https://www.cnblogs.com/TheYouth/p...
    長衣貌閱讀 2,513評論 2 13
  • 一.總說內(nèi)購的內(nèi)容 協(xié)議、稅務(wù)和銀行業(yè)務(wù) 信息填寫 內(nèi)購商品的添加 添加沙盒測試賬號 內(nèi)購代碼的具體實現(xiàn) 內(nèi)購的注...
    默默_David閱讀 3,668評論 0 6
  • 一.總說內(nèi)購的內(nèi)容 協(xié)議拣宏、稅務(wù)和銀行業(yè)務(wù) 信息填寫 內(nèi)購商品的添加 添加沙盒測試賬號 內(nèi)購代碼的具體實現(xiàn) 內(nèi)購的注...
    九洲仙人閱讀 2,969評論 2 3