2016년 9월 10일 토요일

in-app purchases (Restore 추가) @@ in Swift2.x - Xcode 7.3 iOS 9.3

in-app purchases 적용하기 

앱 내 결제기능을 적용하기위해  in-app purchases를 사용한다.

필요조건
 -  itunes connect 계정 (은행정보 입력되어 있어야 함)


1. 프레임 워크 추가하기

프레임워크는 좌측 프로젝트 > TARGETS > Capabilities > in-App Purchase  ON 으로 하여 완료되었을경우  자동으로 추가됨 




프레임워크 추가 되었는지 확인
프로젝트  > General 하단에 > Libraries > StoreKit.framework 확인

2. 인 앱 제픔 productID 확인하기

 ViewController.swift 

// StoreKit 를 import 해주고 SKProductsRequestDelegate,SKPaymentTransactionObserver 를 추가 합니다
import UIKit
import StoreKit 



class ViewController: UIViewController,SKProductsRequestDelegate,SKPaymentTransactionObserver {
         ...
    }

// productID 에는 itunes connect > 나의 App > CustomApp > App내 추가기능 에 등록 한 제품 ID를 입력 합니다. ( 미리 제품을 등록해야 합니다!)
    

UIViewController,SKProductsRequestDelegate,SKPaymentTransactionObserver {

    // 제품 타이틀과 정보, 구매버튼 아울렛
    @IBOutlet weak var productTitle: UILabel!
    @IBOutlet weak var productDescription: UITextView!
    @IBOutlet weak var buybutton: UIButton!
    @IBOutlet weak var reStorebutton: UIButton!
         var product: SKProduct?


         var productID = "product ID 입력"
                   ...
    }




3. 코딩 작업

이제 결제 작업을 위해 트랜젝션 감시자 설정과, 제품정보를 얻어서 사용자에게 표시하는 메서드
를 만들어야 한다. 

  override func viewDidLoad() {
        super.viewDidLoad()
       //구매제품정보 얻을때까지 구매버튼, Restore 버튼 비활성화

        buybutton.enabled = false
        reStorebutton.enabled = false 
       //결제 작업을 위해 트랜잭션 감시자를 설정
        SKPaymentQueue.defaultQueue().addTransactionObserver(self)
       //앱스토어에 접속하고 지정한 ID에 대한 제품 정보를 가지고 와서 표시하는 함수 호출
        ItemProduct()
}
  // 제품정보가져오는 함수
  func ItemProduct(){
   if SKPaymentQueue.canMakePayments(){
   let request = SKProductsRequest(productIdentifiers: NSSet(object: self.productIDasSet<String>)
            request.delegate = self

           // 제품정보를 가져올 경우 didReceiveResponse 델리게이트 메서드 호출
            request.start()
        }else{
            print("Please enable in App purchase in Settings")
        }
    }


  //didReceiveResponse 델리게이트 메서드
 func productsRequest(request: SKProductsRequest, didReceiveResponse response: SKProductsResponse) {
        var products = response.products
        print(products)
        if (products.count != 0){
            product = products[0as SKProduct
            //제품정보 확인! 구매버튼, Restore 버튼 활성화
            buybutton.enabled = true
            reStorebutton. enabled = true        
            // 제품 타이틀과 정보 각각 넣기
            productTitle.text = product!.localizedTitle
            productDescription.text = product!.localizedDescription
        }else{
            print("product not found")
        }
        if response.invalidProductIdentifiers.count != 0 {
            print(response.invalidProductIdentifiers.description)
        }
        for product in products
        {
            print("Product not found: \(product)")
        }   
    }
  // 구매버튼의 함수에 결제프로세스를 시작트랜잭션 감시자 객체의 updatedTransactions 메서드를 호출하도록 한다

   @IBAction func buyproduct(sender: AnyObject) { 
        let payment = SKPayment(product: product!)
        SKPaymentQueue.defaultQueue().addPayment(payment)
    }   
// Restore 버튼 함수에 Restore 트랜젝션 메서드 호출
  @IBAction func RestoreAction(sender: AnyObject) {
        print("restore")
        SKPaymentQueue.defaultQueue().addTransactionObserver(self)
        SKPaymentQueue.defaultQueue().restoreCompletedTransactions()

    }


 //updatedTransactions 메서드
    func paymentQueue(queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) {
        for transactions in transactions as [SKPaymentTransaction]{
             switch transactions.transactionState{
            case SKPaymentTransactionState.Purchased:
                print("buy, ok unlock")
                self.success()
                SKPaymentQueue.defaultQueue().finishTransaction(transactions)
                break;
            case SKPaymentTransactionState.Failed:
                print("buy error")
                SKPaymentQueue.defaultQueue().finishTransaction(transactions)
                break;
            case SKPaymentTransactionState.Restored:
                print("Rstore")
                self.restoreFeature()
                SKPaymentQueue.defaultQueue().finishTransaction(transactions)
                break;
            default:
                print("defult")
                break;
            }
        }
    }
    
  // 결제 완료 됐을 실행될 함수
  func success() {
        buybutton.enabled = false
        print("ok")
    }
  // Restore 완료 됐을 시 실행될 함수
  func restoreFeature(){
        reStorebutton.enabled = false
        print("restore")

    }


이렇게 구매버튼 과 Restore 버튼을 사용하여 인 앱 결제를 마무리 하였다.

댓글 없음:

댓글 쓰기

추천 게시물

애플 개발자 등록방법 2016년 5월 8일 기준!!

애플 개발자 등록 절차 1. 개발자 등록 페이지 이동    애플 개발자 로그인 > Account 페이지 이동 > 하단 영역 클릭 (이미지 참조)   >> Enroll 클릭 >> 무조건 승인!! ...