通过Coinbase iOS SDK检索所有用户钱包

时间:2018-01-06 01:12:33

标签: ios objective-c oauth coinbase-api

我最近一直在尝试使用Coinbase iOS SDK,而且我一直在检索用户的以太坊,Litecoin和比特币现金余额和历史交易时遇到问题。目前,我只使用比特币,美元和欧元设法做到这一点,这似乎与Coinbase提供的演示应用程序的行为一致。

我已使用OAuth2在Coinbase API Access页面上配置了应用程序,并且正在应用程序中使用生成的客户端ID和密码。

问题似乎源于我修改了Coinbase iOS SDK以允许我传递帐户参数的事实 '所有'。我希望这可以让我查看所有用户帐户(ETH,BTC,LTC等)的详细信息。但是,在Coinbase对象上调用'getAccountsList'时,我只获得BTC,USD和EUR。

NSString *accessToken = [response objectForKey:@"access_token"];
Coinbase *client = [Coinbase coinbaseWithOAuthAccessToken:accessToken];

[client getAccountsList:^(NSArray *accounts, CoinbasePagingHelper *paging, NSError *error) {
    for (CoinbaseAccount *account in accounts) {
        // Only BTC, USD and EUR are in the accounts array at this point. 
    }
}];

这是令人惊讶的,因为权限请求页面正确地要求用户提供所有钱包,如下面的屏幕截图所示:

enter image description here

我怀疑对此的解决方案是使用API​​密钥,因为您可以准确指定要授予访问权限的帐户。我计划分发应用程序,因此不应使用此技术。

enter image description here

以下是我发送的网址示例:

https://www.coinbase.com/oauth/authorize?response_type=code&client_id=CLIENT_ID_GOES_HERE&account=all&scope=balance%20transactions%20user&redirect_uri=com.example-name.example-app.coinbase-oauth%3A%2F%2Fcoinbase-oauth

是否有人知道我如何使用OAuth请求访问所有用户帐户,并且能够检索每个帐户的详细信息?我定义的范围在某种程度上是不正确的吗?我能想到的唯一选择是逐个请求访问每个钱包并存储个人访问令牌。但是,这不是一个很好的用户体验。

谢谢!

4 个答案:

答案 0 :(得分:2)

添加参数

account=all

到oAuth终点:https://coinbase.com/oauth/authorize account = al l& response_type = code .. ..

以下是详细信息:https://developers.coinbase.com/docs/wallet/coinbase-connect/permissions

  

Coinbase Connect应用程序可以请求对用户钱包的不同访问权限。此访问权限由OAuth2授权URL上的帐户参数定义。可用选项包括:`

     
      
  • 选择 - (默认)允许用户选择与应用程序关联的钱包
  •   
  • new - 应用程序将创建一个新的钱包(以应用程序命名)
  •   
  • 所有 - 应用程序可以访问所有用户的钱包
  •   

答案 1 :(得分:0)

首先,如果您没有,则需要create an account on Coinbase

然后,请先查看Coinbase digital api documentation,我同意您使用API​​获取数据可能更容易(如果目标帐户只是您自己的个人帐户)

因为根据Coinbase

  

API密钥身份验证只应用于访问您自己的帐户或商家订单。如果您的应用程序需要访问其他Coinbase用户的帐户,请不要使用API​​密钥。要安全访问其他Coinbase用户的帐户,请使用Coinbase Connect(OAuth2)

您有两种可能性:

  • USE API

假设用户已根据wallet permission documentation.

向API密钥授予wallet:accounts:read(允许您列出用户的帐户及其余额)

完成后,您可以使用官方wallet client libraries for iOS - coinbase可通过CocoaPods - 将以下行添加到您的Podfile中:

pod "coinbase-official"
  • 使用OAuth2 PROTOCOL

根据this

  

它比API Key身份验证方法稍微复杂一些,但更灵活。 OAuth2适用于Web应用程序以及桌面和移动应用程序。

您会在coinbase-connect integrating documentation中找到很多信息,您也可以先查看official OAuth2 protocol website

假设你对OAuth2没问题,你还必须要求用户在请求数据之前授予你许可。

当您需要访问用户钱包时,您仍然需要请求访问令牌并在授权请求中添加scope参数(您的应用程序请求访问的权限(范围)的逗号分隔列表),如果您需要要查看完整的范围列表,请自行参考to this page

所需范围与API方法相同:wallet:accounts:read,您的请求将如下所示:

GET https://www.coinbase.com/oauth/authorize?response_type=code&client_id=YOUR_CLIENT_ID&redirect_uri=YOUR_REDIRECT_URL&state=SECURE_RANDOM&scope=wallet:accounts:read

成功请求后,响应中将返回一个有效的访问令牌(如下所示):

{
"access_token": "6915ab99857fec1e6f2f6c078583756d0c09d7207750baea28dfbc3d4b0f2cb80",
"token_type": "bearer",
"expires_in": 7200,
"refresh_token": "73a3431906de603504c1e8437709b0f47d07bed11981fe61b522278a81a9232b7",
"scope": "wallet:user:read wallet:accounts:read"

}

获得访问令牌后,如果向请求添加以下标头,则可以进行与前一个范围相对应的任何API调用:

Authorization: Bearer 6915ab99857fec1e6f2f6c078583756d0c09d7207750baea28dfbc3d4b0f2cb80

最后,您可以参考API reference documentation查看所有可能的API调用和相对范围。

总而言之,您需要授予权限,然后列出用户帐户,然后您可以获得任何account resource

  

帐户资源代表用户的所有帐户,包括比特币,比特币现金,莱特币和以太币钱包,法定货币帐户和保险库。

此致

答案 2 :(得分:0)

仍然没有运气。

尝试添加参数account=all。它让我可以访问所有钱包(与op完全相同)。但是,在代码中,我只能获得BTC钱包,BTC Vault,EUR钱包和新创建的BTC钱包。新钱包是通过添加参数account=new创建的。

尝试添加参数account_currency=BTC,ETH并在oAuth授权上选择ETH Wallet。 getAccountsList是否返回 0 对象且服务器没有错误。

尝试撤销我的Coinbase帐户中的所有API应用程序访问权限(设置 - >安全性)。

范围:balance transactions user

端点:.../oauth/authorize?account=all&response_type=code&client_id=%...

答案 3 :(得分:0)

我认为iOS SDK需要更新。它仍然连接到旧的API版本。

我使用原始的Coinbase SDK。没有叉子。相反,在wallet:accounts:read范围旁边,我还将["accounts": "all"]添加为startAuthentication方法的元参数。

和。我没有使用getAccountList方法,而是使用api v2帐户端点的更一般的.doGet方法(所以coinbase.doGet("https://api.coinbase.com/v2/accounts", parameters: nil) {(response, error) -> Void in

这为我提供了所有钱包的帐户信息。在这种情况下,您确实需要对响应对象执行一些json处理。