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 查询使用未弃用的方法测试了编码,但它仍然无法正常工作。原始查询字符串是可行的方法。