StoreKit-2

import UIKit

import StoreKit

class ViewController: UITableViewController {

// 数据源, 用于显示可以被销售的商品列表

var products: [SKProduct] = [SKProduct]() {

didSet {

tableView.reloadData()

}

}

deinit {

SKPaymentQueue.defaultQueue().removeTransactionObserver(self)

}

@IBAction func retore(sender: AnyObject) {

SKPaymentQueue.defaultQueue().restoreCompletedTransactions()

SKPaymentQueue.defaultQueue().addTransactionObserver(self)

}

override func viewDidLoad() {

super.viewDidLoad()

// 1. 从我们自己的服务器, 获取需要销售的额商品

LZJDataTool.getGoodsList { (ids: Set<String>) -> () in

// 2. 拿到需要销售的额商品, 到苹果服务器, 进行验证, 看下, 哪些商品, 才可以真正被销售

// 2.1 创建一个商品请求, 请求哪些商品可以真正的呗销售

let request: SKProductsRequest = SKProductsRequest(productIdentifiers: ids)

// 2.1.1 设置代理, 接收可以被销售的商品列表数据

request.delegate = self

// 2.2 发送请求

request.start()

}

}

}

// tableview数据源方法/代理方法

extension ViewController {

override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

return products.count

}

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

let cell = tableView.dequeueReusableCellWithIdentifier("product")

// 获取对应的商品数据模型, 进行赋值

let product = products[indexPath.row]

// SKProduct 系统提供的商品模型

// product.localizedTitle 商品名称

// product.localizedDescription 商品描述

// product.price 商品价格

cell?.textLabel?.text = product.localizedTitle

cell?.detailTextLabel?.text = product.localizedDescription + "\(product.price)"

return cell!

}

override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {

// 1. 取出需要购买的商品

let product = products[indexPath.row]

// 2.0 p判断当前的支付环境, 是否可以支付

if SKPaymentQueue.canMakePayments() {

// 2. 购买商品

// 2.1 根据商品, 开一个支付小票

let payment = SKPayment(product: product)

// 2.2 添加到支付队列, 开始进行购买操作

SKPaymentQueue.defaultQueue().addPayment(payment)

// 2.3 添加交易队列的监听者, 来监听交易状态

SKPaymentQueue.defaultQueue().addTransactionObserver(self)

}

}

}

// 交易队列的监听者

extension ViewController: SKPaymentTransactionObserver {

// 当交易队列里面添加的每一笔交易状态发生变化的时候调用

func paymentQueue(queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) {

for transaction in transactions {

switch transaction.transactionState {

case .Deferred:

print("延迟处理")

case .Failed:

print("支付失败")

// 应该移除交易队列

queue.finishTransaction(transaction)

case .Purchased:

print("支付成功")

// 应该移除交易队列

queue.finishTransaction(transaction)

case .Purchasing:

print("正在支付")

case .Restored:

print("恢复购买")

// 应该移除交易队列

queue.finishTransaction(transaction)

}

}

}

}

// 商品请求代理

extension ViewController: SKProductsRequestDelegate {

// 当请求完毕之后, 从苹果服务器获取到数据之后调用

func productsRequest(request: SKProductsRequest, didReceiveResponse response: SKProductsResponse) {

// response

// products: 可以被销售的额商品

// invalidProductIdentifiers: 无效的商品ID

print(response.products)

print(response.invalidProductIdentifiers)

// 给数据源进行赋值

products = response.products

}

}

时间: 2024-10-11 06:53:26

StoreKit-2的相关文章

iOS 在应用内展示App Store 【StoreKit,SKStoreProductViewController】

出于什么样的原因你会希望用户从你的iOS app中进入App Store呢?可能你想用户去App Store 为你的应用评分,也可能你希望用户看到你其他的iOS app.iOS 6引入了SKStoreProductViewController类,可以让用户在不离开当前应用的前提下展示App Store中的其他产品. Store Kit SKStoreProductViewController类是Store Kit框架的一部分.SKStoreProductViewController使用起来非常简

&lt;转&gt;iOS应用程序内使用IAP/StoreKit付费、沙盒(SandBox)测试、创建测试账号流程!

原文地址:http://blog.csdn.net/xiaominghimi/article/details/6937097 //——2012-12-11日更新   获取"产品付费数量等于0这个问题"的原因 看到很多童鞋问到,为什么每次都返回数量等于0?? 其实有童鞋已经找到原因了,原因是你在 ItunesConnect 里的 “Contracts, Tax, and Banking”没有完成设置账户信息. 确定 ItunesConnect 里 “Contracts, Tax, and

【iOS开发必收藏】详解iOS应用程序内使用IAP/StoreKit付费、沙盒(SandBox)测试、创建测试账号流程!【2012-12-11日更新获取”产品付费数量等于0的问题”】

转的别人的 看到很多童鞋问到,为什么每次都返回数量等于0?? 其实有童鞋已经找到原因了,原因是你在 ItunesConnect 里的 “Contracts, Tax, and Banking”没有完成设置账户信息. 确定 ItunesConnect 里 “Contracts, Tax, and Banking”的状态,如下图所示,即可: 这里也是由于Himi疏忽的原因没有说明,这里先给童鞋们带来的麻烦,致以歉意. //——2012-6-25日更新iap恢复 看到很多童鞋说让Himi讲解如何恢复i

iOS 6 SDK: 在应用内展示App Store 【StoreKit,SKStoreProductViewController】

原文  http://www.gowhich.com/blog/view/id/382 出于什么样的原因你会希望用户从你的iOS app中进入App Store呢?可能你想用户去App Store 为你的应用评分,也可能你希望用户看到你其他的iOS app.iOS 6引入了SKStoreProductViewController类,可以让用户在不离开当前应用的前提下展示App Store中的其他产品. Store Kit SKStoreProductViewController类是Store K

详解iOS应用程序内使用IAP/StoreKit付费、沙盒(SandBox)测试、创建测试账号流程

Himi  原创, 欢迎转载,转载请在明显处注明! 谢谢. 原文地址:http://blog.csdn.net/xiaominghimi/article/details/6937097 //——2012-12-11日更新   获取"产品付费数量等于0这个问题"的原因 看到很多童鞋问到,为什么每次都返回数量等于0?? 其实有童鞋已经找到原因了,原因是你在 ItunesConnect 里的 “Contracts, Tax, and Banking”没有完成设置账户信息. 确定 Itunes

Unity调用IOS的StoreKit实现在游戏内部的对游戏进行星级评价和评论

废话不多说直接上代码. 一 Xcode端的OC代码 在Xcode里面新建一个空的工程(不会搞的百度一下),然后创建一个.h和.m文件,记住要把.m的后缀改成.mm(.mm文件和.m文件的区别就是:.mm文件除了可以包含Objective-C和C代码以外,还可以包含C++代码),这个类要继承自NSObject .h代码如下: // // UnityStoreKit.h // UnityStoreKit // // Created by mac on 2017/12/14. // Copyright

用Visual Studio将Objective-C编译为C++

编译器支持 谷歌和苹果公司都使用Clang作为它们的C++前段.为了使他们的代码运行在Windows上,微软不得不将Visual C++的后端C2和Clang结合起来. (Clang是一个C语言.C++.Objective-C.Objective-C++语言的轻量级编译器,源代码发布于BSD协议下.译者注) IDE支持 在Visual Studio中Objective-C具有语法高亮.代码完成和调试支持等功能.C++和C#文件可以包含在同一个项目中,允许程序来直接跨区域进行调用.编译器将处理所有

iOS: 实现苹果的内购

一.介绍: 在个人开发的app上架到AppStore后,苹果官方允许我们将自己的app在appstore上进行付费使用,也就是所谓的内购.其中,支付方式规定的必须是苹果的支付方式:应用内支付. 二.流程: 1.后台设置 (1)配置Developer.apple.com,为应用建立一个不带通配符的App ID (2)用该应用的App ID生成和安装相应的Provisioning Profile文件 2.配置iTunes Connect (1)用该App ID创建一个新的应用: (2)在该应用中,创

iOS 开发之内购 – AppStore

前言 本文会给大家详细介绍iOS内购,虽然之前网上也有内购的教程,但是还不够详细,我重新整理出一份教程,希望对大家有所帮助. 基于Xcode7.1.1版本,模拟器iphone6,9.1系统. 部分地方直接摘自网络,省时省心省力. 多图预警!!! 一. 创建测试App 创建App-1 首先你需要登录 App的ItunesConnection,你会看到如下界面 http://t.cn/Rcj7Nes 简单的介绍一下这几个选项 1.我的App主要用于管理自己的App应用,例如编辑资料,上架,下架等.

iOS的基本框架

在iOS中框架是一个目录,包含了共享资源库,用于访问该资源库中储存的代码的头文件,以及图像.声音文件等其他资源.共享资源库定义应用程序可以调用的函数和方法.    iOS为应用程序开发提供了许多可使用的框架,并构成IOS操作系统的层次架构,分为四层,从上到下依次为:Cocoa Touch Layer(触摸UI层).MediaLayer(媒体层).Core Services Layer(核心服务层).Core OS Layer(核心OS层). 低层次框架提供IOS的基本服务和技术,高层次框架建立在