关于 planetninekit.com 的通告
www.planetninekit.com 目前正在建设中。在它上线并运行之前,这里有一些有用的链接。
-
对于 PlanetNineGateway Cocoapod,在这里就可以找到。只需继续向下滚动。
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框架。希望本说明文档已经对您有所帮助。我们期待看到您创作的内容!