好的,我已经设法解决了这个问题,我也被文档弄糊涂了,它并没有清楚地解释它的含义
检索中指定的设备的订阅
授权令牌。
由于本文档的措辞含糊,我在让用户注册订阅时也遇到了问题。
为了获得 Quickblox 的授权令牌(用于会话或用户会话),您之前必须使用文档中描述的参数生成 HMAC SHA1 签名:
- application_id(API 应用标识符)
- auth_key (AuthenticationKey)
- 时间戳(Unix时间戳)
- nonce(Unix 时间戳)
- 用户[登录]
- 用户[密码]
- 签名(HMAC SHA1,如下所述)
使用这些参数及其值,您应该已经创建了一个如下所示的字符串:
'application_id=22&auth_key=wJHd4cQSxpQGWx5&nonce=33432×tamp=1326966962&user[login]=test@test.com&user[password]=test123'
然后 HMAC SHA1 这个值,使用您的应用程序机密作为 HMAC 机密,以获取请求的签名,例如C#
using (HMACSHA1 hmac = new HMACSHA1(Encoding.ASCII.GetBytes(secret)))
{
hmac.Initialize();
byte[] buffer = Encoding.ASCII.GetBytes(value);
return BitConverter.ToString(hmac.ComputeHash(buffer)).Replace("-", "").ToLower();
}
获得此签名后,您可以将请求发送到 Quickblox 以获取授权令牌,在本示例中,它是用户会话的令牌。
您需要将用于生成签名的所有参数(包括生成的签名)发送到请求正文中,并将POST 发送到端点/session.json
例如
POST 到 /session.json
{
"application_id":"2",
"auth_key":"DtF9cZPqTF8Wy9Q",
"timestamp":"1333630392",
"nonce":"1236221330",
"user":
{
login: "test@test.com",
password: "test123"
},
"signature":"eb0ec2d8c8184a3e62b41da2afb6e8d690577fa4"
}
你得到的响应应该有我们需要的用户会话请求的授权令牌。
解决您的问题
正如您提到的,此令牌不适用于检索用户订阅,并返回未找到,尽管推送通知的订阅已经存在并链接到用户。
发生这种情况的原因是因为用户与设备之间存在 1:M 关系,并且 Quickblox 不会返回所有订阅,只返回与发出请求的特定设备相关的订阅,但您必须告诉它这一点。
我们缺少的元素是将设备参数添加到授权令牌中,如果有的话在文档中描述得很糟糕。
为了使其正常工作,我们需要在授权请求中添加device[udid]和device[platform]。这既可以识别用户,也可以识别他们用于 Quickblox 的特定设备。
为此,请执行与上述完全相同的操作,但 HMAC SHA1 的值现在应该如下所示
'application_id=22&auth_key=wJHd4cQSxpQGWx5&device[platform]=android&device[udid]=2374682h23780239j&nonce=33432×tamp=1326966962&user[login]=test@test.com&user[password]=test123'
请注意,如果您以不同的顺序放置密钥,您将收到“意外签名”错误,设备[平台] 必须在 auth_key 等之后...
使用此字符串生成您的签名,然后使用与上述类似的请求发送它:
例如
POST 到 /session.json
{
"application_id":"2",
"auth_key":"DtF9cZPqTF8Wy9Q",
"timestamp":"1333630392",
"nonce":"1236221330",
"user":
{
login:"test@test.com",
password:"test123"
},
"device":
{
"platform":"android",
"udid":"2374682h23780239j"
}
"signature":"5t4d2d8c81848b6c4s41da2afb6e8d690889bc4"
}
当使用以下命令请求订阅时,您从 Quickblox 返回的令牌应用作 QB-Token 标头值:
GET/subscriptions.json
在提出票证并搜索互联网后,我偶然发现了这段代码并研究了一小会儿,从而找到了这个解决方案。
Sourcecode for Blackberry PushAuth using Quickblox
我希望这可以帮助其他遇到此问题的人,因为我假设 Aleksi Grön 在 2 个月后解决了这个问题。