真机、内购、广告、支付宝


真机测试

1、根据电脑的钥匙串生成CSR文件。
2、生成电脑证书CER(需要CSR文件)。
3、然后根据应用AppID,指定手机设备的UDID来生成一个描述文件。如果没有证书,就生成一个p12文件,再生成描述文件iOS App Development。
总结:哪台电脑的哪个应用运行在哪个设备上。


打包测试

1、生成测试证书(App Store and Ad Hoc既能测试又能发布程序)
2、配置AppID。根据设备生成描述文件App Hoc。
注意:测试release版本。因为发布的也是release版本。


发布程序

用需要CSR文件生成一个发布证书,再根据应用AppID,生成描述文件App Store。
注意:AppID需要配置一个明确的,也就是你的项目名。才能实现内购。


内购流程:

图左线:服务器 ------------- 图中线:App---------------- 图右线:苹果


真机、内购、广告、支付宝_第1张图片
内购.png

使用代理:
1、Get Set of Product IDs内购商品信息最好存放到服务器,因为界面的展示都是根据模型显示(将数据放到一个集合里面:NSSet/Web Service)前提是需要将项目在苹果内购后台信息配置好
2、向苹果请求有效的内购商品信息Request Valid Product IDs (苹果可能限制某些商品)怎么请求:SKProductsRequest(创建这个请求)。
3、苹果返回有效的内购商品信息Valid DIs Returned
4、展示购买的选项(展示界面)Display Purchase Options
5、用户开始购买(User Initiates Purchase):选中某个商品,创建票据(SKPayment),将票据加入到交易队列里面(User Works Through Dialogs)
6、监听交易队列交易成功还是失败(添加观察者,遵守协议,实现方法进行回调)。
(代理一对一,观察者一对多)


要使用内购,需要导入StoreKit框架

请求有效的产品
1) 实例化产品请求
SKProductsRequest  *request =[[SKProductsRequestalloc]initWithProductIdentifiers:identifiers];
2) 设置代理
[requestsetDelegate:self];
3) 启动请求
[requeststart];
提示:
  1. 实例化请求时,必须指定有效的identifiers集合,之所以如此处理,主要是为了确保提交的内购商品真的通过了苹果的审批,处于可用状态!
  2. 要想获取到准确的可用产品集合,需要通过代理方法实现
-(void)productsRequest:(SKProductsRequest*)request didReceiveResponse:(SKProductsResponse*)response
  1. 越狱用户无法测试内购,但是可以购买

购买产品
  1. 内购的交易过程是通过SKPaymentTransactionObserver监控的,因此需要为IAPHelper添加交易观察者:
添加交易观察者对象
[[SKPaymentQueuedefaultQueue]addTransactionObserver:sharedInstance];
  1. 由于发起交易需要使用SKProduct对象,因此需要使用字典记录所有可用的商品
NSMutableDictionary         *_productsDict;

交易队列回调方法
 -(void)paymentQueue:(SKPaymentQueue*)queue updatedTransactions:(NSArray*)transactions
{
    for(SKPaymentTransaction*transaction intransactions) {
        //购买完成
            if(transaction.transactionState== SKPaymentTransactionStatePurchased){
            NSLog(@"购买完成%@", transaction.payment.productIdentifier);
            [queue finishTransaction:transaction];
        } elseif(transaction.transactionState== SKPaymentTransactionStateFailed){
            if(transaction.error.code!= SKErrorPaymentCancelled){
                NSLog(@"交易失败:%@", transaction.error.localizedDescription);
            }
        }
    }
}

恢复购买
    [[SKPaymentQueuedefaultQueue]restoreCompletedTransactions];

购买数据记录
    [[NSUserDefaultsstandardUserDefaults]setBool:isPurchasedforKey:productId];
    [[NSUserDefaultsstandardUserDefaults]synchronize];

内购注意

比如用tableview的cell来显示数据时,不应该让这个cell能双击,避免将多个票据放到队列中。应该在点击时,让用户不能再点击,避免产生多个票据。
交易的状态:
SKPaymentTransactionStatePurchasing:正在购买、
SKPaymentTransactionStatePurchased:购买成功(已经购买)、
SKPaymentTransactionStateFailed:购买失败、
SKPaymentTransactionStateRestored:恢复商品(不同手机时能恢复)、
SKPaymentTransactionStateDeferred:未决定(iOS8)
当购买时程序退出:有状态记录,根据状态恢复。


广告

广告的展现内容,是由苹果根据应用程序的关键字,分类,上架地区等综合评定后自动推送的,应用程序无需关心
广告控件(ADBannerView)

添加iAd.framework框架,添加ADBannerView视图,并设置代理方法
广告条加载完成之前最好隐藏

    -(void)bannerViewDidLoadAd:(ADBannerView*)banner {
        self.bannerBottomConstraint.constant= 20.0;    
        [UIViewanimateWithDuration:0.5animations:^{
            [self.viewlayoutIfNeeded];
        }];   
        NSLog(@"广告加载成功");
    }
    -(void)bannerView:(ADBannerView*)banner didFailToReceiveAdWithError:(NSError*)error {
        NSLog(@"广告加载失败%@",error);
    }

广告的代理方法
// 广告加载失败
- (void)bannerView:(ADBannerView *)banner didFailToReceiveAdWithError:(NSError *)error
{
}
// 即将加载广告
- (void)bannerViewWillLoadAd:(ADBannerView *)banner
{
}
// 广告已经加载
- (void)bannerViewDidLoadAd:(ADBannerView *)banner
{
    //self.bannerViewBottomCon:约束
    //等广告加载完毕后以动画的方式显示
    self.bannerViewBottomCon.constant = 0;
    [UIView animateWithDuration:0.5 animations:^{
        [self.view layoutIfNeeded];
    }];
}
//广告退出
- (void)bannerViewActionDidFinish:(ADBannerView *)banner
{
}

支付宝

支付宝的前提:购买的物品必须是和应用程序无关的,比如:团购卷/衣服/电子产品。否则不允许上架,如会员,游戏道具。
内购:用户将钱给苹果,苹果分给商户。
支付宝:用户将钱给支付宝。


支付宝大致流程:

1、向支付宝申请, 与支付宝签约,获得商户ID(partner)和账号ID(seller)和私钥(privateKey)
2、下载支付宝SDK,生成订单信息,签名加密
3、调用支付宝客户端,由支付宝客户端跟支付宝安全服务器打交道
4、支付完毕后,支付宝客户端会自动跳回到原来的应用程序
5、在原来的应用程序中显示支付结果给用户看


集成支付宝:

1、和支付宝签约(产品负责)
2、下载支付宝SDK和官方文档
3、拖入对应的SDK文件等(加密的静态库、订单类、订单类)
4、当用户购买某一个商品时
4.1生成订单信息
4.2对订单进行加密
4.3打开支付宝客户端让用户支付
4.4获取支付的回调信息

    // 1.获取签约之后的三个数据
    NSString *partner = @"";
    NSString *seller = @"";
    NSString *privateKey = @"";
   > 
    // 2.生成订单和签名
    Order *order = [[Order alloc] init];
    order.partner = partner;
    order.seller = seller;
    order.tradeNO = nil; //订单ID(由商家自行制定)
    order.productName = product.name; //商品标题
    order.productDescription = product.detail; //商品描述
    order.amount = [NSString stringWithFormat:@"%.2f",product.price]; //商品价格
    >
    // 服务器的回调地址
    order.notifyURL =  @"http://www.xxx.com"; // 用户支付成功后,支付宝服务器会同步通知我们的服务器.我们服务器需要有一个可以回调的地址
    order.service = @"mobile.securitypay.pay";//接口
    order.paymentType = @"1";//
    order.inputCharset = @"utf-8";
    order.itBPay = @"30m";//过期时间,分钟
    order.showUrl = @"m.alipay.com";
    >
    //应用注册scheme,在AlixPayDemo-Info.plist定义URL types
    NSString *appScheme = @"alipay";
   > 
    //将商品信息拼接成字符串
    NSString *orderSpec = [order description];
   > 
    //获取私钥并将商户信息签名,外部商户可以根据情况存放私钥和签名,只需要遵循RSA签名规范,并将签名字符串base64编码和UrlEncode
    id signer = CreateRSADataSigner(privateKey);
    NSString *signedString = [signer signString:orderSpec];
    >
    //将签名成功字符串格式化为订单字符串,请严格按照该格式
    NSString *orderString = [NSString stringWithFormat:@"%@&sign=\"%@\"&sign_type=\"%@\"",
                       orderSpec, signedString, @"RSA"];
    >
    // 跳转到支付宝进行支付
    [[AlipaySDK defaultService] payOrder:orderString fromScheme:appScheme callback:^(NSDictionary *resultDic) {
        NSLog(@"reslut = %@",resultDic);
    }];

补充:

1、获取商品信息
2、生成订单
3、打开支付宝,确定支付
4、支付宝服务器扣钱--->银行....
5、支付宝服务器返回结果给支付宝客户端,同时支付宝服务器异步返回结果给商品服务器(防止黑客),支付宝客户端返回结果给自己的app.
6、成功就会在appDalegate中获取到信息。

// 跳用支付宝客户端开始支付
    // callBack : 如果用户没有安装支付宝客户端,弹出webView让用户支付
    [[AlipaySDK defaultService] payOrder:orderString fromScheme:appScheme callback:^(NSDictionary *resultDic) {
        NSLog(@"reslut = %@",resultDic);
    }];

你可能感兴趣的:(真机、内购、广告、支付宝)