+
95
-

ios apple苹果app不能使用微信支付宝充值打赏送礼,怎么走苹果内购?

ios apple苹果app不能使用微信支付宝充值打赏送礼,请问怎么走苹果内购?

网友回复

+
15
-

是的,必须走苹果内购,你看微信打赏由于没走苹果内购,没使用IAP,直接下架,后来微信去掉了打赏。

那么什么是IAP,即in-app-purchase。(虚拟商品如:课程、视频、音乐等数字产品只能走apple 的内购),苹果要扣除30%的销售额,再扣除一点相关的交易税,用户到手将不到7成。如果是实体的商品是可以使用微信支付宝支付的。

内购流程

1.获取内购列表(从App内读取或从自己服务器读取)

2.App Store请求可用的内购列表

3.向用户展示内购列表

4.用户选择了内购列表,再发个购买请求,收到购买完成的回调(购买完成后会把钱打给申请内购的银行卡内)

5.购买流程结束后, 向服务器发起验证凭证以及支付结果的请求

6.自己的服务器将支付结果信息返回给前端并发放虚拟产品

7.服务端的工作比较简单,分4步:

7.1.接收ios端发过来的购买凭证。

7.2.判断凭证是否已经存在或验证过,然后存储该凭证。

7.3.将该凭证发送到苹果的服务器验证,并将验证结果返回给客户端。

7.4.如果需要,修改用户相应的会员权限。

7.5.考虑到网络异常情况,服务器的验证应该是一个可恢复的队列,如果网络失败了,应该进行重试。

简单来说就是将该购买凭证用Base64编码,然后POST给苹果的验证服务器,苹果将验证结果以JSON形式返回。

二、流程

1.登录苹果开发者网站新建一个App应用: 2.填写协议、税务、银行信息:

3.创建内购商品:

(1).商品名称根据你的消费道具的实际意义来说明,比如“100颗宝石”,“100金币”等。 (2).产品ID是比较重要的,由项目自定义,只要唯一即可,我一般都是用App的bundleID加一个后缀来表示,这样既跟项目关联又具有唯一性。 (3).价格等级的话“查看价格表”中有对应的说明,可以对照着表中每个国家的货币价格与等级来选择。

4.添加沙盒测试者

沙盒测试环境下苹果不会抽成,购买成功后直接返回商品。

appid 需要时从未与apple id 从未关联过的账号

appid 可以是任何有效的邮箱地址

5.内购代码封装IapManager.swift:

//
//  IapManager.swift
//  tai_chi
//
//  Created by vincent on 2019/10/9.
//  Copyright © 2019 vincent. All rights reserved.
//

import Foundation
import StoreKit



//内购协议
@objc protocol IapManagerProtocol {
    
    //商品请求结果回调
    func productsResponse(_ response:SKProductsResponse?,error:Error?)
    
    //交易成功回调
    func completedTransaction(_ transaction:SKPaymentTransaction)
    
    //交易失败回调
    @objc optional func transactionFail(transaction:SKPaymentTransaction)
    
}




//内购管理
class IapManager : NSObject,SKProductsRequestDelegate,SKPaymentTransactionObserver {
    
    private static var instance:IapManager?
    
    var delegate:IapManagerProtocol?
    
    var requestResponse:SKProductsResponse?
    
    var requestErr:Error?
    
    
    
    override init() {
        
        super.init()
        SKPaymentQueue.default().add(self)
        
    }
    
    
    //静态方法
    static func shared() -> IapManager{
        
        if instance == nil {
            instance = IapManager()
        }
        return instance!
    }
    
    //判断app 是否允许...

点击查看剩余70%

我知道答案,我要回答