iOS 'fetchUserDataWithQuery' 上的 Snapchat SnapKit 登录总是失败,出现 SCOAuth2ClientErrorDomain 403
Snapchat SnapKit Login on iOS 'fetchUserDataWithQuery' always fails with SCOAuth2ClientErrorDomain 403
我正在试用 Snpachat 的 SnapKit 登录 api,并且我已经按照 documentation/guide 中的描述设置了我的项目。我允许在仪表板中使用所有范围,即外部 ID、显示名称和 bitmoji,并在我的应用程序的 .plist 中添加了必填字段。
登录和身份验证正常进行并且 return 成功,但是当我尝试获取用户数据时,该请求每次都失败并出现 SCOAuth2ClientErrorDomain 错误。
我正在使用指南中提供的代码片段(尽管该代码有错别字并且无法按原样构建,所以我怀疑该代码的有效性):
[SCSDKLoginClient loginFromViewController:self completion:^(BOOL success, NSError * _Nullable error) {
NSString *graphQLQuery = [@"{me{displayName, bitmoji{avatar}, externalId}}" stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSDictionary *variables = @{@"page": @"bitmoji"};
[SCSDKLoginClient fetchUserDataWithQuery:graphQLQuery
variables:variables
success:^(NSDictionary *resources) {
NSDictionary *data = resources[@"data"];
NSDictionary *me = data[@"me"];
NSString *displayName = me[@"displayName"];
NSDictionary *bitmoji = me[@"bitmoji"];
NSString *bitmojiAvatarUrl = bitmoji[@"avatar"];
} failure:^(NSError * error, BOOL isUserLoggedOut) {
// handle error as appropriate
}];
}];
我什至试过在没有 bitmoji 的情况下配置我的应用程序,并在没有它的情况下尝试了请求,它仍然失败。
[SCSDKLoginClient loginFromViewController:self completion:^(BOOL success, NSError * _Nullable error) {
NSString *graphQLQuery = [@"{me{displayName, externalId}}" stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
[SCSDKLoginClient fetchUserDataWithQuery:graphQLQuery
variables:nil
success:^(NSDictionary *resources) {
NSDictionary *data = resources[@"data"];
NSDictionary *me = data[@"me"];
NSString *displayName = me[@"displayName"];
} failure:^(NSError * error, BOOL isUserLoggedOut) {
// handle error as appropriate
}];
}];
有人知道我做错了什么吗?
好的,我成功了。
首先,我将我正在测试的用户重新添加到开发者门户中的演示用户。之后,SCOAuth2ClientErrorDomain 错误消失了,我得到了成功回调。
但是,响应数据是查询字符串中的错误。问题是他们使用的是已弃用的方法 stringByAddingPercentEscapesUsingEncoding。我不确定确切的问题是什么,但我只是将原始字符串作为查询发送,并且得到了有效的响应。
更新:我认为这里不需要编码。 api 的用户对查询进行编码没有意义。 api 应该在内部处理它,我认为这就是这里可能发生的情况。所以你可能得到一个双重编码的查询,然后没有正确编码并且无效。我针对 URL 查询使用未弃用的方法测试了编码,但它仍然无法正常工作。原始查询字符串是可行的方法。
我正在试用 Snpachat 的 SnapKit 登录 api,并且我已经按照 documentation/guide 中的描述设置了我的项目。我允许在仪表板中使用所有范围,即外部 ID、显示名称和 bitmoji,并在我的应用程序的 .plist 中添加了必填字段。
登录和身份验证正常进行并且 return 成功,但是当我尝试获取用户数据时,该请求每次都失败并出现 SCOAuth2ClientErrorDomain 错误。
我正在使用指南中提供的代码片段(尽管该代码有错别字并且无法按原样构建,所以我怀疑该代码的有效性):
[SCSDKLoginClient loginFromViewController:self completion:^(BOOL success, NSError * _Nullable error) {
NSString *graphQLQuery = [@"{me{displayName, bitmoji{avatar}, externalId}}" stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSDictionary *variables = @{@"page": @"bitmoji"};
[SCSDKLoginClient fetchUserDataWithQuery:graphQLQuery
variables:variables
success:^(NSDictionary *resources) {
NSDictionary *data = resources[@"data"];
NSDictionary *me = data[@"me"];
NSString *displayName = me[@"displayName"];
NSDictionary *bitmoji = me[@"bitmoji"];
NSString *bitmojiAvatarUrl = bitmoji[@"avatar"];
} failure:^(NSError * error, BOOL isUserLoggedOut) {
// handle error as appropriate
}];
}];
我什至试过在没有 bitmoji 的情况下配置我的应用程序,并在没有它的情况下尝试了请求,它仍然失败。
[SCSDKLoginClient loginFromViewController:self completion:^(BOOL success, NSError * _Nullable error) {
NSString *graphQLQuery = [@"{me{displayName, externalId}}" stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
[SCSDKLoginClient fetchUserDataWithQuery:graphQLQuery
variables:nil
success:^(NSDictionary *resources) {
NSDictionary *data = resources[@"data"];
NSDictionary *me = data[@"me"];
NSString *displayName = me[@"displayName"];
} failure:^(NSError * error, BOOL isUserLoggedOut) {
// handle error as appropriate
}];
}];
有人知道我做错了什么吗?
好的,我成功了。
首先,我将我正在测试的用户重新添加到开发者门户中的演示用户。之后,SCOAuth2ClientErrorDomain 错误消失了,我得到了成功回调。
但是,响应数据是查询字符串中的错误。问题是他们使用的是已弃用的方法 stringByAddingPercentEscapesUsingEncoding。我不确定确切的问题是什么,但我只是将原始字符串作为查询发送,并且得到了有效的响应。
更新:我认为这里不需要编码。 api 的用户对查询进行编码没有意义。 api 应该在内部处理它,我认为这就是这里可能发生的情况。所以你可能得到一个双重编码的查询,然后没有正确编码并且无效。我针对 URL 查询使用未弃用的方法测试了编码,但它仍然无法正常工作。原始查询字符串是可行的方法。