内购和广告


内购原理(类似商场交易):

内购实现步骤:

导入StoreKit框架

1.用要销售的商品列表 给苹果
1.1.创建一个产品请求  用来请求可销售的商品列表
//开始请求
2.返回一个可以销售的商品列表
//3.展示可销售的商品列表

4.用户点击购买 -> 生成一个交易

5.把交易添加到交易队列(交易对象需要监听者来监听交易状态)

6.添加一个监听者 监听交易的状态

[[SKPaymentQueue defaultQueue]addTransactionObserver:self];

7.交易完成  - >  提供增值服务


内购示例:

#import "ViewController.h"
#import <StoreKit/StoreKit.h>
@interface ViewController ()<SKProductsRequestDelegate,SKPaymentTransactionObserver>
@property (nonatomic, strong) NSArray *allProducts;
@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
   
    //1.用要销售的商品列表 给苹果
   
    NSString *path = [[NSBundle mainBundle]pathForResource:@"products.json" ofType:nil];
   
    NSData *data = [NSData dataWithContentsOfFile:path];
   
    NSArray *allData = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];
  
   
    NSArray *avProducts = [allData valueForKeyPath:@"productId"];
     NSLog(@"%@",avProducts);
    NSSet *set = [NSSet setWithArray:avProducts];
    //1.1.创建一个产品请求  用来请求可销售的商品列表
    SKProductsRequest *request = [[SKProductsRequest alloc]initWithProductIdentifiers:set];
   
    request.delegate = self;
   
    //开始请求
    [request start];

//6.添加一个监听者
    [[SKPaymentQueue defaultQueue]addTransactionObserver:self];
   }
#pragma mark -<SKProductsRequestDelegate>
/**
 *  返回商品列表的时候就会调用
 *
 *  @param request  请求对象
 *  @param response 返回结果
 */

//2.返回一个可以销售的商品列表

- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response
{
    for (SKProduct *product in response.products) {
       
        NSLog(@"%@  %@  %@ ",product.localizedTitle,product.localizedDescription,product.price);
       
       
    }
    self.allProducts = response.products;
    //更新界面
    [self.tableView reloadData];
}
/**
 *  //3.展示可销售的商品列表
 */
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return self.allProducts.count;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
   
    static NSString *ID = @"cell";
   
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:ID];
   
    if (cell == nil) {
        cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:ID];
    }
   
   
    SKProduct *product = self.allProducts[indexPath.row];
   
   
    cell.textLabel.text = product.localizedTitle;
   
   
    return cell;
}
//4.用户点击购买 -> 生成一个交易

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    SKProduct * p = self.allProducts[indexPath.row];
   
   
    //5.把交易添加到交易队列(交易对象需要监听者来监听交易状态)
   
    SKPayment *payment = [SKPayment paymentWithProduct:p];
   
    //添加交易(小票)到交易队列
    [[SKPaymentQueue defaultQueue]addPayment:payment];
   
}

#pragma mark- SKPaymentTransactionObserver
/**
 *  交易队列中交易状态改变的时候就会调用
 */
- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions
{
    /*
     SKPaymentTransactionStatePurchasing,    // 交易正在被添加到交易队列
     SKPaymentTransactionStatePurchased,     // 交易已经在队列,客户端需要完成交易
     SKPaymentTransactionStateFailed,        // 失败了  还没有添加到交易队列
     SKPaymentTransactionStateRestored,      // 交易从用户的购买记录中恢复 客户端需要完成交易
     SKPaymentTransactionStateDeferred NS_ENUM_AVAILABLE_IOS(8_0),   交易在队列, 但是其最终状态还需要别的参与
     */
    //7.交易完成  - >  提供增值服务
    for (SKPaymentTransaction *paymentTransaction in transactions) {
    
        if (paymentTransaction.transactionState == SKPaymentTransactionStatePurchased) {
            NSLog(@"购买成功 提供增值服务");
           
            // 因为交易已经完成  手动结束交易
            [[SKPaymentQueue defaultQueue]finishTransaction:paymentTransaction];
           
        }
       
        if (paymentTransaction.transactionState == SKPaymentTransactionStateRestored) {
            NSLog(@"恢复购买成功!");
            [[SKPaymentQueue defaultQueue]finishTransaction:paymentTransaction];
        }
       
    }
   
}

- (IBAction)restoreP:(id)sender {
   
    [[SKPaymentQueue defaultQueue]restoreCompletedTransactions];
   
}

@end


广告:

导入广告的iAd框架

在view中合适的位置添加一个iAd控件

设置广告的代理,在代理方法中实现广告功能

- (void)bannerViewDidLoadAd:(ADBannerView *)banner

{

//广告的约束条件改变  从view的底部弹出

self.consxin.constant = 50;
    [UIView animateWithDuration:2 animations:^{
        [self.view layoutIfNeeded];
    }];
    NSLog(@"加载完毕");

}

时间: 2024-12-28 20:47:10

内购和广告的相关文章

iOS开发之--通讯录、蓝牙、内购、GameCenter、iCloud、Passbook功能开发汇总

前言 iOS开发过程中有时候难免会使用iOS内置的一些应用软件和服务,例如QQ通讯录.微信电话本会使用iOS的通讯录,一些第三方软件会在应用内发送短信等.今天将和大家一起学习如何使用系统应用.使用系统服务: 目录 系统应用 系统服务 2.1. 短信与邮件 2.2. 通讯录 2.3. 蓝牙 2.4. 社交 2.5. Game Center 2.6. 应用内购买 2.7. iCloud 2.8. Passbook 1. 系统应用 在开发某些应用时可能希望能够调用iOS系统内置的电话.短信.邮件.浏览

iOS开发系列——内购、GameCenter、iCloud、Passbook系统服务开发汇总

社交 Social 现在很多应用都内置“社交分享”功能,可以将看到的新闻.博客.广告等内容分享到微博.微信.QQ.空间等,其实从iOS6.0开始苹果官方就内置了Social.framework专门来实现社交分享功能,利用这个框架开发者只需要几句代码就可以实现内容分享.下面就以一个分享到新浪微博的功能为例来演示Social框架的应用,整个过程分为:创建内容编辑控制器,设置分享内容(文本内容.图片.超链接等),设置发送(或取消)后的回调事件,展示控制器. 程序代码: // // ViewContro

iOS开发系列--通讯录、蓝牙、内购、GameCenter、iCloud、Passbook系统服务开发汇总

--系统应用与系统服务 iOS开发过程中有时候难免会使用iOS内置的一些应用软件和服务,例如QQ通讯录.微信电话本会使用iOS的通讯录,一些第三方软件会在应用内发送短信等.今天将和大家一起学习如何使用系统应用.使用系统服务: 调用系统应用 使用系统服务 短信与邮件 通讯录 蓝牙 社交 Game Center 应用内购买 iCloud Passbook 系统应用 在开发某些应用时可能希望能够调用iOS系统内置的电话.短信.邮件.浏览器应用,此时你可以直接使用UIApplication的OpenUR

iOS开发系列通讯录、蓝牙、内购、GameCenter、iCloud、Passbook系统服务开

--系统应用与系统服务 iOS开发过程中有时候难免会使用iOS内置的一些应用软件和服务,例如QQ通讯录.微信电话本会使用iOS的通讯录,一些第三方软件会在应用内发送短信等.今天将和大家一起学习如何使用系统应用.使用系统服务:http://www.jinhusns.com/Products/Download/?type=xcj 调用系统应用 使用系统服务 短信与邮件 通讯录 蓝牙 社交 Game Center 应用内购买 iCloud Passbook 目 录 系统应用 在开发某些应用时可能希望能

iOS开发——高级技术&amp;内购服务

内购服务 大家都知道做iOS开发本身的收入有三种来源:出售应用.内购和广告.国内用户通常很少直接 购买应用,因此对于开发者而言(特别是个人开发者),内购和广告收入就成了主要的收入来源.内购营销模式,通常软件本身是不收费的,但是要获得某些特权就 必须购买一些道具,而内购的过程是由苹果官方统一来管理的,所以和Game Center一样,在开发内购程序之前要做一些准备工作(下面的准备工作主要是针对真机的,模拟器省略Provisioning Profile配置过程): 前四步和Game Center基本

iOS--通讯录、蓝牙、内购、GameCenter、iCloud、Passbook等系统服务开发汇总

iOS开发过程中有时候难免会使用iOS内置的一些应用软件和服务,例如QQ通讯录.微信电话本会使用iOS的通讯录,一些第三方软件会在应用内发送短信等.今天将和大家一起学习如何使用系统应用.使用系统服务: 调用系统应用 使用系统服务 短信与邮件 通讯录 蓝牙 社交 Game Center 应用内购买 iCloud Passbook 目 录 系统应用 在开发某些应用时可能希望能够调用iOS系统内置的电话.短信.邮件.浏览器应用,此时你可以直接使用UIApplication的OpenURL:方法指定特定

iOS开发长文--通讯录、蓝牙、内购、GameCenter、iCloud、Passbook系统服务开发汇总

链接:http://www.cocoachina.com/ios/20150129/11068.html iOS开发过程中有时候难免会使用iOS内置的一些应用软件和服务,例如QQ通讯录.微信电话本会使用iOS的通讯录,一些第三方软件会在应用内发送短信等.今天将和大家一起学习如何使用系统应用.使用系统服务: 调用系统应用 使用系统服务 短信与邮件 通讯录 蓝牙 社交 Game Center 应用内购买 iCloud Passbook 系统应用 在开发某些应用时可能希望能够调用iOS系统内置的电话.

IOS,苹果内购和添加广告

内购——应用内购买 通过苹果应用程序商店有三种主要赚钱的方式: 直接收费(与国内大部分用户的消费习惯相悖) 广告(降低用户体验 应用程序名称带Lite可以添加广告) O2O -> Online推广 & Offline交易,闭环 不要砍功能,增加内容,而不是增加功能 内购:应用程序本身的增值产品,游戏装备,应用程序中增值功能同样可以内购 第三方支付:跟应用程序无关的 内购分成:三(苹果)七(开发商)开 提示: 要做好游戏 & 应用,一定要研究心理,要研究哲学 人人都是产品经理 内购的五

iOS应用内支付(内购)的个人开发过程及坑!

本文会给大家详细介绍iOS内购,这是本人16年5月底的开发过程,希望对看完此篇文章的人有所帮助. 本文基于XcodeVersion 7.3 (7D175)版本,手机是iPhone 6,9.3系统. 部分地方直接摘自网络,基本上是我的逻辑,省时省心省力. 一. 创建测试App 首先你需要登录 App的ItunesConnection,你会看到如下界面 简单的介绍一下这几个选项 1.我的App主要用于管理自己的App应用,例如编辑资料,上架,下架等.2.销售和趋势主要是来查看App在各个平台的下载量