Wie kann ich die Bitcoin-Zahlungsmethode über Swift für mein IOS-Projekt verwenden?

Ich versuche, Bitcoin Payment in meinem IOS- Projekt zu erstellen. Ich verwende schnelle Sprache. Ich suche dieses Thema auf vielen Websites, Youtube, Stack Overflow. aber ich bekomme nur HTTP-Request-bezogene Themen. Hat jemand eine Lösung? Ping mich an...

Antworten (3)

Core Bitcoin ist eine in Objective-C geschriebene Bibliothek für iOS. Ich habe damit in Swift mit dem Bridging-Header gearbeitet.

Ich selbst habe ein paar Swift- Klassen in meiner experimentellen/pädagogischen Brieftasche geschrieben, um Adressen, Schlüssel und Transaktionen zu erstellen, aber ich würde nicht empfehlen, es für irgendetwas zu verwenden. Fühlen Sie sich frei, einen Blick darauf zu werfen und zu sehen, ob Sie etwas Interessantes finden oder etwas, von dem Sie lernen könnten.

Ich schlage vor, dass Sie die Zahlungs-API von BitPay verwenden, indem Sie URLRequest von Swift verwenden. Siehe diese Antwort und diese Antwort für die Swift-Dokumentation und diese Webseite für die BitPay-API-Dokumentation.

Bitte beachten Sie, dass Ihre App möglicherweise nicht von Apple gemocht wird , wenn Ihre App das Bitcoin-Zahlungssystem verwendet .

BitcoinKit ist ein Swift SDK, das eine Bitcoin-Wallet-Implementierung vorschlägt. Dies ist eine vollständige Implementierung des SPV-Knotens, einschließlich Wallet creation, restore, synchro with network, sendingund receivingTransaktionen usw. Schauen Sie sich auch BitcoinKit auf CocoaPods an .

Geben Sie hier die Bildbeschreibung ein

Hier ist ein Code-Snippet, das zeigt, wie es aussieht:

import UIKit
import BitcoinKit

class ViewController: UIViewController {
    @IBOutlet private weak var qrCodeImageView: UIImageView!
    @IBOutlet private weak var addressLabel: UILabel!
    @IBOutlet private weak var balanceLabel: UILabel!
    @IBOutlet private weak var destinationAddressTextField: UITextField!    
    private var wallet: Wallet? = Wallet()
    
    override func viewDidLoad() {
        super.viewDidLoad()
        self.createWalletIfNeeded()
        self.updateLabels()
    }
    
    func createWalletIfNeeded() {
        if wallet == nil {
            let privateKey = PrivateKey(network: .testnetBCH)
            wallet = Wallet(privateKey: privateKey)
            wallet?.save()
        }
    }
    
    func updateLabels() {
        qrCodeImageView.image = wallet?.address.qrImage()
        addressLabel.text = wallet?.address.cashaddr
        if let balance = wallet?.balance() {
            balanceLabel.text = "Balance : \(balance) satoshi"
        }
    }
    
    func updateBalance() {
        wallet?.reloadBalance(completion: { [weak self] (utxos) in
            DispatchQueue.main.async { self?.updateLabels() }
        })
    }

    @IBAction func didTapReloadBalanceButton(_ sender: UIButton) {
        updateBalance()
    }
    
    @IBAction func didTapSendButton(_ sender: UIButton) {
        guard let addressString = destinationAddressTextField.text
        else { return }
        
        do {
            let address: BitcoinAddress = try AddressFactory.create(addressString)
            try wallet?.send(to: address, amount: 10000, completion: { [weak self] (response) in
                print(response ?? "")
                self?.updateBalance()
            })
        } catch {
            print(error)
        }
    }
}