ios - iOS 上的 Snapchat SnapKit 登录总是失败 'fetchUserDataWithQuery' 并显示 SCOAuth2ClientErrorDomain 403

标签 ios authentication snapchat snapkit

我正在尝试 Snpachat 的 SnapKit 登录 api,并且我已经按照文档/指南中的描述设置了我的项目。我允许在仪表板中使用所有范围,即外部 id、显示名称和 bitmoji,并在我的应用程序的 .plist 中添加所需字段。

登录和身份验证正常进行并成功返回,但是当我尝试获取用户数据时,该请求每次都会失败,并出现 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 的情况下配置我的应用程序,并在没有 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 查询方法测试了编码,但仍然不起作用。原始查询字符串是正确的选择。

关于ios - iOS 上的 Snapchat SnapKit 登录总是失败 'fetchUserDataWithQuery' 并显示 SCOAuth2ClientErrorDomain 403,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51246144/

相关文章:

ios - UIButton 自定义类

ios - 如何快速将标签或按钮固定到图像上?

iOS 12 - "The app' s Info.plist 必须包含 NSMicrophoneUsageDescription 键”

mongodb - 无法在身份验证模式下使用 Mongo 连接 Mongo-Spark Connector

c# - FB.Logout() 在 Facebook UnitySDK 中不起作用

android - 添加可配置且可动画的视频过滤器,就像 Snapchat 中一样

ios - iOS 上类似 snapchat 的捏合缩放

opencv - 在视频中移动物体上叠加图像(增强现实/OpenCv)

ios - 如何在 appcelerator ios 中实现自定义转换

django - 使用远程身份验证进行单元测试