2

我正在尝试 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 的情况下配置我的应用程序,并在没有它的情况下尝试了请求,但它仍然失败。

[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
                                        }];
}];

任何人都知道我可能做错了什么?

4

1 回答 1

2

好的,我得到它的工作。

首先,我将我正在测试的用户重新添加到开发人员门户中的演示用户。之后,SCOAuth2ClientErrorDomain 错误消失了,我得到了成功回调。

但是,响应数据是查询字符串中的错误。问题是他们使用了不推荐使用的方法stringByAddingPercentEscapesUsingEncoding。我不确定确切的问题是什么,但我刚刚将原始字符串作为查询发送,并且得到了有效的响应。

更新:我认为这里不需要编码。api 的用户对查询进行编码是没有意义的。api 应该在内部处理它,我认为这就是这里可能发生的事情。所以你可能会得到一个双重编码的查询,然后它没有正确编码并且是无效的。我使用不推荐的 URL 查询方法测试了编码,但它仍然不起作用。原始查询字符串是要走的路。

于 2018-07-10T11:26:27.817 回答