Skip to content
APE
  • 首页

Category iOS

  • 首页   /  前端
  • 分类归档: "iOS"
iOS, Swift 10 月 27,2019

Swift5 iOS 集成支付宝支付

本文基于支付宝老版移动支付,不适用于新版App支付

本文未使用服务端签名,建议签名由服务端实现

导入AlipaySdk

本demo使用CocoaPods导入支付宝SDK,创建Brdging-Header.h文件(点击查看参考)

CocoaPods导入AlipaySdk
platform :ios, '10.0'
target 'AlipayDemo-mobile' do
  source 'https://mirrors.tuna.tsinghua.edu.cn/git/CocoaPods/Specs.git'
  pod 'AlipaySDK-iOS'
end
导入图中所示文件(移除两个 .a 后缀的库)
导入上面移除的两个库文件
把alipay路径加入Header Search Paths
添加URL Types

调用支付宝

    var ALIPAY_NOTIFY_URL  = "http://ape.ren/notify.html"   //商户后台回调地址
    var PARTNER = "2088xxxxxxx"  //商户号
    var SELLER = "xxxx@xxxx.com"    //商户账号
    var RSA_PRIVATE = "私匙"
     func aliPay(){
        let orderId = "test43241123"
        let price = 0.01
        let body = "body43241123"
        let subject = "subject43241123"
        
        let aliOrder = AlipayOrder(partner: PARTNER, seller: SELLER, tradeNO: orderId, productName: subject, productDescription: body, amount: price, notifyURL: ALIPAY_NOTIFY_URL, service: "mobile.securitypay.pay", paymentType: "1", inputCharset: "utf-8", itBPay: "3d", showUrl: "m.alipay.com", rsaDate: nil, appID: nil)
        
        
        let orderSpec = aliOrder.description
        
        let signer = RSADataSigner(privateKey: RSA_PRIVATE)
        let signedString = signer?.sign(orderSpec)
        
        let orderString = "\(orderSpec)&sign=\"\(signedString!)\"&sign_type=\"RSA\""
        
        AlipaySDK.defaultService().payOrder(orderString, fromScheme: "alipay-test", callback: nil)
        //alipay-test替换为自己设置的URL Types
    }

AppDelegate中添加回调状态监听

internal func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool {
        //支付宝支付回调
        if String(url.host!) == "safepay" {
            AlipaySDK.defaultService().processOrder(withPaymentResult: url,standbyCallback: {
                (value) in
                let code = value!
                let resultStatus = code["resultStatus"] as!String
                var content = ""
                switch resultStatus {
                case "9000":
                    content = "支付成功"
                case "8000":
                    content = "订单正在处理中"
                case "4000":
                    content = "支付失败"
                case "5000":
                    content = "重复请求"
                case "6001":
                    content = "中途取消"
                case "6002":
                    content = "网络连接出错"
                case "6004":
                    content = "支付结果未知"
                default:
                    content = "支付失败"
                    break
                }
                print(content)
            })
        }
        
        return true
    }

Demo下载

AlipayDemo-mobile下载

作者 peng
iOS, Swift, 前端 7 月 10,2019

Swift5 iOS 集成百度语音识别

百度AI开放平台创建App

https://login.bce.baidu.com

填写APP信息,注意核对项目Bundle Identfier
控制台创建应用
进入创建好的应用详情页获取图中标注的三个重要值

下载百度语音识别SDK

官方下载地址:点击下载(2019.07.09)

本站下载地址:点击下载(速度较慢,下载链接永久有效,版本和文章中一致)

导入SDK到项目中

添加Framework

Framework描述
libc++.tbd提供对C/C++特性支持
libz.1.2.5.tbd提供gzip支持
AudioToolbox提供录音和播放支持
AVFoundation提供录音和播放支持
CFNetwork提供对网络访问的支持
CoreLocation提供对获取设备地理位置的支持,以提高识别准确度
CoreTelephony提供对移动网络类型判断的支持
SystemConfiguration提供对网络状态检测的支持
GLKit内置识别控件所需
libsqlite3
项目根目录中创建lib目录
复制sdk文件到新创建的lib目录中
Create groups方式添加lib目录到项目中
点击Delete后选择Remover References方式移除BDSClientResources
在ASR目录下重新以Create folder references添加到项目中
导入完成后删除图中所示.gitignore文件,不然编译不能通过

创建 xxx-Brdging-Header.h (Swift --> OC桥接文件)

创建--百度语音识别-swift5-Brdging-Header.h
设置桥接文件到项目Brdging Header中

输入文件地址:$(PROJECT_DIR)/百度语音识别-swift5-Brdging-Header.h
可以输入绝对路径(拖动文件到输入框)
引入语音识别
//百度语音识别
#import "BDSEventManager.h"
#import "BDSASRDefines.h"
#import "BDSASRParameters.h"

调用语音识别API

在线识别

// 创建语音识别对象
self.asrEventManager = BDSEventManager.createEventManager(withName: BDS_ASR_NAME)
// 设置语音识别代理
self.asrEventManager?.setDelegate(self)
// 参数配置:在线身份验证
self.asrEventManager?.setParameter(["n3ysthxxxxxxxxxx","Y7vDShIvf9jK4cxxxxxxxxxxxx"], forKey: BDS_ASR_API_SECRET_KEYS)
//设置 APPID
self.asrEventManager?.setParameter("1600000", forKey: BDS_ASR_OFFLINE_APP_CODE)
        
// 获取VAD模型的路径
let path = Bundle.main.path(forResource: "bds_easr_basic_model", ofType:"dat")  
self.asrEventManager?.setParameter(path, forKey: BDS_ASR_MODEL_VAD_DAT_FILE)
self.asrEventManager?.setParameter(true, forKey: BDS_ASR_ENABLE_MODEL_VAD)
        
// 发送指令:启动识别
self.asrEventManager?.sendCommand(BDS_ASR_CMD_START)
//    // 发送指令:结束语音输入,等待识别完成
//    self.asrEventManager?.sendCommand(BDS_ASR_CMD_STOP)
//    // 发送指令:取消本次识别
//    self.asrEventManager?.sendCommand(BDS_ASR_CMD_CANCEL)

实现BDSClientASRDelegate

func voiceRecognitionClientWorkStatus(_ workStatus: Int32, obj aObj: Any!) {
    switch workStatus {
    case 4: //连续上屏
        let resDic = aObj as! NSDictionary
        let resText = (resDic["results_recognition"]! as! NSArray)[0];
        print("连续上屏",workStatus,"   ", resText)
        break
            
    case 5: //最终结果
        let resDic = aObj as! NSDictionary
        let resText = (resDic["results_recognition"]! as! NSArray)[0];
        print("最终结果",workStatus,"   ", resText)
        break
    default:
        break
    }
}

识别结果

附录

跳转官方附录

Demo下载

点击下载Demo

运行Demo前请修改Bundle Identfier、APPID、AppKey、AppSecret为正确值

作者 peng
iOS, Swift, 前端 5 月 18,2019

Swift5 UISwitch基本使用方法

效果图

故事面板创建UISwitch控件

  1. 拖动创建UISwitch
  2. 拖动连接New Referencing outlet 到控制器定义成员变量位置(自动创建)或者绑定到已声明变量上
  3. 拖动Sent Events -->valueChanged到switchValueChanged方法,方法处理业务逻辑(如下所示)

同步两个UISwitch控件状态

    @IBAction func switchValueChanged(_ sender: Any) {
        //同步leftSwitch,rightSwitch开关状态
        let sen = sender as! UISwitch
        let setting = sen.isOn
        self.leftSwitch.setOn(setting, animated: true)
        self.rightSwitch.setOn(setting, animated: true)
        
        //同步分段控件(UISegmentedControl)状态
        if(setting == true){
            segmented.selectedSegmentIndex = 0
        }else{
            segmented.selectedSegmentIndex = 1
        }
    }

源码下载

UISwitch-demoDownload
作者 peng
iOS, Swift, 前端 5 月 17,2019

Swift5 监听TextField/TextView软键盘return按钮点击事件

关联委托(delegate)到ViewController

在故事面板或XBI文件中,右击TextField/TextView弹出快捷菜单拖拽Outlets-->delegate后到小圆点到ViewController

实现UITextFieldDelegate/UITextViewDelegate委托协议

class ViewController: UIViewController,UITextFieldDelegate,UITextViewDelegate {

    @IBOutlet weak var label: UILabel!
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
    }

    //略.......
}

ViewController实现UITextFieldDelegate协议方法

 func textFieldShouldReturn(_ textField: UITextField) -> Bool {
    print("TextField获得焦点,点击return键")
    textField.resignFirstResponder()
    return true
}

ViewController实现UITextViewDelegate协议方法

func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool {
    if(text == "\n"){
        print("TextView获得焦点,点击return键")
        textView.resignFirstResponder()
        return true
    }
    return false
}

源码下载

Swift5-监听TextFieldTextView软键盘return按钮点击事件Download
作者 peng

1 2 下一个

Just For You - 李嘉格,李唯枫

http://ape.ren/wp-content/uploads/2020/09/1600942088-Just-For-You-李嘉格李唯枫.mp3

近期文章

  • logstash 配置jdbc数据源 output 到 Elasticsearch 2022年11月24日
  • MySQL SQL性能分析Explain执行计划 2020年12月11日
  • CentOS 7安装MySQL8.0配置主从复制 2020年12月8日
  • Nginx配置二级目录访问ThinkPhp 2020年1月20日
  • Android Gradle更换为阿里源 2019年11月26日
  • Swift5 iOS 集成支付宝支付 2019年10月27日
  • Swift5 iOS 集成百度语音识别 2019年7月10日
  • Swift5 UISwitch基本使用方法 2019年5月18日
  • Swift5 监听TextField/TextView软键盘return按钮点击事件 2019年5月17日
  • Swift5监听软键盘弹出、隐藏事件 2019年5月17日
  • Android图像加载之Picasso 2019年5月14日

近期评论

    归档

    • 2022 年 11 月 (1)
    • 2020 年 12 月 (2)
    • 2020 年 1 月 (1)
    • 2019 年 11 月 (1)
    • 2019 年 10 月 (1)
    • 2019 年 7 月 (1)
    • 2019 年 5 月 (4)

    分类

    • Android (2)
    • Elasticsearch (1)
    • iOS (5)
    • logstash (1)
    • MySQL (3)
    • Nginx (1)
    • Swift (5)
    • 前端 (5)

    标签

    Alipay Android CentOS 7 Elasticsearch Gradle iOS logstash MySQL MySQL8.0 Nginx PHP SQL优化 Swift ThinkPHP 支付宝 语音识别

    其他操作

    • 登录
    • 条目 feed
    • 评论 feed
    • WordPress.org

    渝ICP备19006962号-1
    All Rights Reserved by BusiProf. Designed and Developed by WordPress Theme.