如何集成 Pi SDK
HTML 代码
要使用 Pi App Platform SDK,您需要将 SDK 脚本标签添加到应用首页的前端 HTML 代码中。对于大多数开发者来说,这通常是用作“/”路由或首页的 index.html 文件。
接下来,您需要调用初始化函数来初始化 SDK。您需要指定当前版本,以确保与未来 SDK 版本的兼容性。
在下面的代码示例中,第一个脚本标签调用 SDK,而第二个脚本标签调用 init 函数并声明 SDK 的当前版本。
<script src="https://sdk.minepi.com/pi-sdk.js"></script>
<script> Pi.init({ version: "2.0" }) </script>截至 2022 年 8 月,2.0 版本为最新版本。
沙盒旗帜
如果您想在本地环境中运行 Pi App Platform SDK,可以使用名为 sandbox 的可选标签。您必须在开发者门户中配置开发 URL 才能使用此功能。在沙盒环境中测试时,该标志应设置为 true。
<script src="https://sdk.minepi.com/pi-sdk.js"></script>
<script> Pi.init({ version: "2.0", sandbox: true }) </script>如果您使用的框架或样板支持此功能,则可以设置沙箱标志以匹配您的开发环境。例如,大多数优秀的 Node 样板会将 `process.env.NODE_ENV` 的值设置为“development”或“production”,您可以这样做:
<script>
Pi.init({ version: "2.0", sandbox: <%= process.env.NODE_ENV !== 'production' %> })
</script>如果您在本地开发环境中运行应用程序,则需要将应用程序配置为在沙盒模式下运行 SDK。
沙盒 URL
要获取沙盒中应用程序的 URL,请打开 Pi 浏览器并导航到应用程序的开发者门户页面。滚动到页面底部,查找名为“开发 URL”的部分。

将该部分中的网址复制粘贴到您常用的桌面浏览器中,然后按回车键。
您将被重定向到一个类似于下图的页面,页面上会显示“需要登录”以及一串随机的字母和数字

授权沙箱
现在您需要授权沙盒访问您在沙盒内的应用。这是为了让 Pi 服务器知道是哪个 Pioneer 设备正在访问沙盒。要在您的手机上执行此操作,请打开 Pi 应用。在侧边栏菜单中,点击“Pi 工具”选项。您将看到如下所示的屏幕,您需要点击页面底部的“授权沙盒”链接。

点击“授权沙盒”链接后,您将被带到以下页面。
请将本页显示的代码输入到桌面浏览器的“登录代码”字段中,然后点击“确认”。

现在,桌面浏览器上的“需要登录”页面应该会重定向到您的应用主页。您现在可以在本地环境中测试应用的功能。您需要将 Test-Pi 添加到您的 Pi 钱包才能进行任何交易。有关支付的更多信息,请参阅Pi 支付部分。
在您的应用程序中调用 Pi 应用平台 SDK
Window.Pi
要调用 SDK,您必须首先初始化一个指向树莓派的新窗口。这可以通过以下代码完成:
const Pi = window.Pi;
您可以根据喜好为变量命名。在本指南中,我们使用 ` Pi.`。现在窗口已经初始化完毕,是时候开始使用 Pi 应用平台 SDK 提供的功能了。
函数
支付和访问令牌的功能及用例的详细说明将在“重要主题”部分进行深入探讨。本节将介绍如何使用身份验证和支付这两个基本功能。
认证
Authenticate 函数将请求 Pioneer 的范围,并以 promise 的形式将其返回给应用程序。
作用域是指应用程序可以请求的 Pioneer 信息的各个方面。为了保护 Pioneer,这些信息在可能的情况下会被隐藏。即使为请求的作用域传递了一个空数组, Authenticate 函数AuthResults也始终返回“UserDTO” 。accessToken
访问令牌是一个动态标识符,可与 Pi 应用平台 API 结合使用以验证 Pioneer 设备。访问令牌会按设定的时间间隔更改,不应用于为 Pioneer 创建唯一记录。它uid是 Pioneer 设备的应用程序本地标识符,也就是说,它uid特定于该 Pioneer 设备及其请求该令牌的应用程序。
呼叫身份验证
Authenticate 函数接受两个参数: `Scopes`scopes和onIncompletePaymentFound`callback`。`Scopes` 是一个字符串数组,onIncompletePaymentFound`callback` 是一个预先编写的回调函数。这两个参数均由开发者实现,具体说明如下。
以下 JavaScript 代码示例将调用 authenticate 函数并将返回值记录到控制台:
const Pi = window.Pi;
// Empty array for testing purposes:
const scopes = [ ];
//Empty function that will log an incomplete payment if found
//Developer needs to implement this callback function
function onIncompletePaymentFound(payment) {
console.log(payment);
};
Pi.authenticate(scopes, onIncompletePaymentFound).then(function(auth){
console.log(auth)
}).catch(function(error) {
console.error(error);在JavaScript中,空的作用域数组将返回一个Promise对象:
AuthResults{
accessToken: string,
user: UserDTO,
}安全提示:使用此方法获取的 Pioneer 信息(包括访问令牌uid和accessToken访问令牌)在验证之前不应保存到您的数据库中,并且仅应用于展示逻辑(例如,显示 Pioneer 的用户名)。请将这些信息传递给您的后端,然后使用此方法获取的访问/me令牌,通过请求 Pi 平台 API 的端点来验证 Pioneer 的身份。端点的返回值将包含 Pioneer 的访问令牌;如果未找到访问令牌或访问令牌无效,则会返回错误代码。本指南的“Pi 应用平台 API”页面详细介绍了 Pi 平台 API 。accessToken/meuid
先锋认证
当用户首次访问该应用时,会弹出一个窗口询问是否允许与应用共享其信息。每个请求的范围都会显示给用户,用户可以选择“允许”或“取消”该请求。
在决定请求哪些权限范围时,最好仅限于应用程序核心功能所需的权限范围。请求过多信息可能会导致 Pioneers 拒绝与您的应用程序共享信息的请求。此外,这也会引发人们对权限范围请求意图的质疑。
先锋用户首次访问应用时看到的屏幕:

在 Pioneer 批准此请求之前,该应用程序不会从 Pi 接收任何信息。
瞄准镜
用户名
该username权限范围将返回 Pioneer 的用户名,开发者可以借此将个性化功能集成到其应用程序中,供 Pioneer 用户使用。例如,它可以用于显示进度或成就,例如在游戏排行榜上显示。
要请求该值username,请将字符串“username”添加到作用域数组变量中。请注意,这不会从返回的列表中移除该值accessToken或参数。uid
const scopes = ['username'];
JavaScript 中返回的 Promise:
AuthResults{
accessToken: string,
user: {
uid: string,
username: string
}
}付款
该payments字符串用于初始化 Pi 支付。添加此作用域后,不会返回任何对象或信息。要添加此作用域,请参阅以下代码示例:
代码示例:
// Requesting payment scope from the Pi App Platform SDK:
const scopes = ['payments'];
//Empty function that will log an incomplete payment if found
//Developer needs to code this callback function
function onIncompletePaymentFound(payment) {
console.log(payment);
};
Pi.authenticate(scopes, onIncompletePaymentFound).then(function(auth){
console.log(auth)
}).catch(function(error) {
console.error(error);现在您已经实现了支付范围,可以创建支付了。
创建付款
Pi App Platform SDK 创建支付的函数接受两个参数paymentData。paymentCallback
支付数据包含支付相关的变量,在 JavaScript 中应该使用 `PaymentData` 对象来构建Object {}。该对象的格式如下。您可以根据需要命名该对象:
const paymentData = {
amount: number, /* Pi Amount being Transacted */
memo: string, /* "Any information that you want to add to payment" */
metadata: object {}, /* { Special Information: 1234, ... } */
};paymentCallbacks 是一组回调函数,将在支付流程的各个阶段使用。这些回调函数来自 Pi App Platform SDK,每个函数都预先填充了它将接收的参数。在实现这些函数时,应将这些信息传递给服务器端,以便使用 Pi App Platform API。务必实现所有回调函数,以便应用程序能够处理错误。
// Callbacks the developer needs to implement:
const paymentCallbacks = {
onReadyForServerApproval: function(paymentId) { /* ... */ },
onReadyForServerCompletion: function(paymentId, txid) { /* ... */ },
onCancel: function(paymentId) { /* ... */ },
onError: function(error, payment) { /* ... */ }
};以下是一个使用 JavaScript 代码并结合上述变量处理 1 个 Pi 的示例付款。该示例函数在返回信息.then后使用了一个函数,用于获取返回信息并将其打印到控制台;该函数还会接收任何错误并将其打印到控制台。您无需在代码中实现错误处理,但它可以大大简化故障排除过程。createPayment.catch
const paymentData = {
amount: 1,
memo: 'This is a Test Payment',
metadata: { InternalPaymentID: 1234 },
};
// Callbacks the developer needs to implement:
const paymentCallbacks = {
onReadyForServerApproval: function(paymentId) { /* ... */ },
onReadyForServerCompletion: function(paymentId, txid) { /* ... */ },
onCancel: function(paymentId) { /* ... */ },
onError: function(error, payment) { /* ... */ }
};
Pi.createPayment(paymentData, paymentCallbacks).then(function(payment) {
console.log(payment)
}).catch(function(error) {
console.error(error);
});
}SDK 已集成完毕,您可以开始实现 Pi API 了。
Pi 打赏
微信打赏