PlanetNineGateway 0.0.42

PlanetNineGateway 0.0.42

维护者 Zach Babb



  • Zach Babb

关于 planetninekit.com 的通告

www.planetninekit.com 目前正在建设中。在它上线并运行之前,这里有一些有用的链接。

Planet Nine Gateway

Planet Nine Gateway 允许您在 iOS 上与 Planet Nine 生态系统进行交互。

入门指南

Cocoapods

使用 CocoaPods 安装,将以下内容添加到您的 Podfile

pod 'PlanetNineGateway'

使用方法

启用深度链接

首先,在 Planet Nine 应用中启用深度链接,请将 LSApplicationQueriesSchemes 属性添加到您的 info.plist 中,并将其添加到数组中。

一次性网关

一次性网关是与 Planet Nine 应用交互的最基本方式。一次性网关允许用户在您的应用提示时一次性消耗 Power。要启动一次性网关,导入 PlanetNineGateway 并简单使用

let planetNineGateway = PlanetNineGateway()
planetNineGateway.oneTimeGateway(totalPower: 200, partnerName: partnerName, gatewayName: gatewayName, gatewayURL: "ongoingtest://gateway", partnerDisplayName: "Gateway Tester", description: "This is the test app for Planet Nine Gateway Framework")
planetNineGateway.askForPowerUsage()

totalPower:可以是超过 200 的任何值

partnerName:是接收交易中 Nineum 的交易伙伴的用户名

gatewayName:是提示用户消耗 Power 时网关的显示名称

gatewayURL:是用于回调到您应用的 URL

partnerDisplayName:是用户显示的友好名称

description:是关于交易目的的描述

调用 askForPowerUsage 将打开 Planet Nine 应用,并显示用户接受或拒绝 Power 使用情况的警告。

一旦用户接受 Power 使用情况,Planet Nine 应用将打开 gatewayURL 中指定的 URL 并返回响应。要在 AppDelegate.swift 中的 func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool 函数中处理此操作,您需要捕获 URL 响应,然后再次创建网关。

let planetNineGateway = PlanetNineGateway()
planetNineGateway.oneTimeGateway(totalPower: 200, partnerName: partnerName, gatewayName: gatewayName, gatewayURL: "ongoing://gateway", partnerDisplayName: "Gateway Tester", description: "For testing the Planet Nine Gateway Framework")

从 URL 的 queryItems 中获取 userUUID 和签名

let userUUID = components.queryItems![0].value
let signature = components.queryItems![1].value

最后,使用具有处理错误和响应的回调的 gateway 对象调用 submitPowerUsage

let planetNineGateway = PlanetNineGateway()
planetNineGateway.oneTimeGateway(totalPower: 200, partnerName: partnerName, gatewayName: gatewayName, gatewayURL: "ongoing://gateway", partnerDisplayName: "Gateway Tester", description: "For testing the Planet Nine Gateway Framework")
planetNineGateway.submitPowerUsage(userUUID: userUUID, signature: signature!) { (error, resp) in
   guard let resp = resp else {
       print("You got an error")
       print(error)
       return
   }
   if error != nil {
       print("You got an error")
       print(error)
       return
   }
   let responseString = String(data: resp, encoding: .utf8)
   print(responseString)
   DispatchQueue.main.async {
       let viewController = UIApplication.topViewController() as! ViewController
       let alert = UIAlertController(title: "Heyoo", message: "You spent the power", preferredStyle: .alert)
       alert.addAction(UIAlertAction(title: "OK", style: .default, handler: nil))
       viewController.present(alert, animated: true, completion: nil)
   }
   
}

一次性蓝牙网关

一次性 BLE 网关用于您想要通过蓝牙低功耗 (BLE) 与九星应用程序交互时。这对于 POS 实现来说是完美的。您启动 BLE 网关的方式几乎与启动一次性网关的方式相同。

let planetNineGateway = PlanetNineGateway()
planetNineGateway.oneTimeBLEGateway(totalPower: 300, partnerName: "test50603336", gatewayName: "Planet Nine Point of Sale", gatewayURL: "pnpos://gateway", partnerDisplayName: "A Test User", description: "This is a test of the BLE gateway") { username in
    print("User: \(username) used 300 Power")
}
planetNineGateway.broadcastBLEGateway()

totalPower:可以是超过 200 的任何值

partnerName:是接收交易中 Nineum 的交易伙伴的用户名

gatewayName:是提示用户消耗 Power 时网关的显示名称

gatewayURL:是用于回调到您应用的 URL

partnerDisplayName:是用户显示的友好名称

description:是关于交易目的的描述

successCallback:这个最后一个参数是网关用于用户成功消费后的回调。九星应用程序将提供使用网关的用户名。

启动网关后,它会自动处理与该网关的所有消费,因此无需编写额外的代码。

持续网关

当您想使用用户信息时,通常是他们九号,或者您希望代表他们进行电力消费,就会用到持续网关。一旦用户已将账户连接到您的应用程序,您将能够看到他们的用户信息并能够执行电力交易。用户可以随时撤销此连接,因此请确保在您的应用程序中处理这种情况。

PlanetNineGateway Cocoapod 负责处理所有这些调用的身份验证问题。这意味着您的应用程序将执行加密,但由于加密仅与身份验证相关联,您将有权免于报告。

        
let planetNineGateway = PlanetNineGateway()
planetNineGateway.ongoingGateway(gatewayName: gatewayName, gatewayURL: "ongoingtest://ongoing")
planetNineGateway.askForOngoingGatewayUsage(presentingViewController: self)

调用 askForOngoingGatewayUsage 将会打开九星应用程序并提示用户进行授权。与一次性网关一样,我们需要捕获九星应用程序的响应。请在 AppDelegate.swift 中的 func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool 函数中再次处理查询项。

guard let components = NSURLComponents(url: url, resolvingAgainstBaseURL: true) else {
            print("Invalid URL or path missing")
            return false
        }

guard let success = components.queryItems![0].value else {
    print("Unsuccessful")
    return
}
guard let userUUID = components.queryItems![1].value else {
    print("No userUUID")
    return
}

一旦检查成功为真,您就可以通过签名字段网关名称来获取九星用户对象。这里我们假设您有一个可以保存 PNUsers 的 UserModel 类。

let planetNineGateway = PlanetNineGateway()
planetNineGateway.getUser(userUUID: userUUID, gatewayName: "The-Ballad-of-Sigurd-dev") { pnUser in
	// handle pnUser here
}

此用户对象将包含所有相关用户信息,包括用户的九号。有关如何使用用户的九号进行操作的示例,请参阅关于制作库存系统的这篇 Blog 文章(待链接到库存系统 Blog 文章)。

您还可以代表用户进行电力消费。为此,您需要创建一个 UsePowerAtOngoingGateway 结构,对其进行签名并将其提交到服务器。这看起来可能如下所示

let planetNineGateway = PlanetNineGateway()
planetNineGateway.usePowerAtOngoingGateway(user: user, gatewayName: "The-Ballad-of-Sigurd-dev", totalPower: 300, partnerName: "team-planet-nine", description: "Used from the Ballad of Lorbert") { error, user in
    if let error = error {
	// handle error
	return
    }
    guard let user = user else { return }
    // handle updated user
}

请记住对其他用户的电力负责,如果您在不应该的时候使用它们,他们将撤销连接,您的声誉将受到影响。

九号

一旦用户已连接其账户,您将能够看到它们的九号并可在您的游戏中使用它。九号具有各种可使用以在您的实现中执行有趣操作的属性。Nineum 结构具有这些属性

public struct Nineum {
    public let universe: Universes
    public let address: Addresses
    public let charge: Charges
    public let direction: Directions
    public let rarity: Rarities
    public let size: Sizes
    public let texture: Textures
    public let shape: Shapes
    public let year: Years
    public let ordinal: Int
    public let hexString: String
}

各属性详解请查看NineumModel文件。Nineum以128位整数的形式表示,并以十六进制字符串的形式表示,用户的Nineum是这些十六进制字符串的数组。要获取Nineum结构体,请调用

let nineumArray = NineumModel().getNineumArrayForNineumHexStrings(hexStrings: nineumHexStrings)

这将返回一个Nineum结构的数组,您可以根据自己的需要检查属性和进行组织。

九数转移

九数转移是一个两步的过程。首先发起一个转移请求,然后用户需要在行星九应用中批准该转移。这是因为第三方未获得交换用户九数的权限。要请求用户,您需要接收用户的userUUID。由于大部分情况下所知的是用户的名字,我们提供了一个获取userUUID的调用。

pn.requestTransfer(gatewayName: "trade-your-nineum", transferRequest: transferRequest, signature: signature) { error, data in

// Do work here

}

一旦您有了接收用户的userUUID,您就可以构造转移请求对象。

let transferRequest = TransferRequest(userUUID: user.userUUID, destinationUserUUID: decodedUser.userUUID, nineumUniqueIds: nineumUniqueIds, price: 0, ordinal: user.powerOrdinal + 1)

此对象还包含您请求的时间戳。此处,userUUID和destinationUserUUID是发送者和接收者的userUUID。nineumUniqueIds是一个表示九数的128位整数的数组,price是与转移相关的任何价格,ordinal是用户的力量ordinal加一。然后您对该消息进行签名,并使用requestTransfer方法将其发送到服务器。

结论

感谢您检查Planet Nine Gateway框架。希望本说明文档已经对您有所帮助。我们期待看到您创作的内容!