Gigya手机注册

时间:2015-03-20 12:04:04

标签: ios json gigya

我使用Gigya作为我的iOS应用的单点登录系统。 它是集成的,我可以使用Twitter,Facebook和手动电子邮件注册登录。

由于Facebook和Twitter都没有返回手机号码,因此我在成功注册/登录后附上此信息以及其他一些信息,如电子邮件。我能够成功更新配置文件中的字段,如用户名,昵称等,但不能更新电话。

可在此处找到配置文件结构的说明: http://developers.gigya.com/020_Client_API/020_Accounts/010_Objects/Profile

所以我想发布: {@"手机":@ [@ {@"号码" :_phoneNumberTextfield.text}]}

作为个人资料内容。这显然没问题,因为响应有statusReason OK。

一切都很好,如果我添加其他字段,它们会更新。但是当我检索个人资料时,那里没有电话号码。我试图追加字段"键入"根据定义,但后来我得到:400025写访问验证错误。

因此更新调用告诉我一切正常,但它不会将数字附加到配置文件。将类型添加到@"手机"的数组中的每个数字条目提供访问冲突。

我已经通过Gigya的API规范,无法找到任何有关此情况的工作示例甚至JSON示例;有人有解决方案吗?

2 个答案:

答案 0 :(得分:1)

服务器端的Gigya SDK将数据表示为JSON对象,它们能够在一个或多个键下表示嵌套对象。

对于" profile.phone"在帐户上的属性,它存储为一个对象数组,详情如下:

{
    "profile": {
        "phones": [
            { "type": "phone", "number": "8005551234" },
            { "type": "cell", "number": "8885551234" }
        ]
    }
}

通常,在使用Gigya的iOS API时,通常将这些JSON概念分别映射到NSMutableDictionary和NSMutableArray类,然后使用NSJSONSerialization类序列化数据。

因此,例如,如果我们想在Gigya帐户中设置电话号码,如上所示,那么您需要使用以下代码完成此操作:

    NSMutableDictionary *phone1 = [NSMutableDictionary dictionary];
    [phone1 setObject:@"phone" forKey:@"type"];
    [phone1 setObject:@"8005551234" forKey:@"number"];

    NSMutableDictionary *phone2 = [NSMutableDictionary dictionary];
    [phone2 setObject:@"cell" forKey:@"type"];
    [phone2 setObject:@"8885551234" forKey:@"number"];

    NSMutableArray *phones = [NSMutableArray array];
    [phones addObject:phone1];
    [phones addObject:phone2];

    NSMutableDictionary *profile = [NSMutableDictionary dictionary];
    [profile setObject:phones forKey:@"phones"];

    NSError *error;
    NSData *jsonData = [NSJSONSerialization dataWithJSONObject:profile
                                                       options:0
                                                         error:&error];

    GSRequest *request = [GSRequest requestForMethod:@"accounts.setAccountInfo"];
    [request.parameters setObject:jsonString forKey:@"profile"];
    [request sendWithResponseHandler:^(GSResponse *response, NSError *error) {
        if (!error) {
            NSLog(@"Success");
            // Success! Use the response object.
        }
        else {
            NSLog(@"error");
            // Check the error code according to the GSErrorCode enum, and handle it.
        }
    }];

或者,您可以直接构造JSON字符串;但是,在添加新属性时,上述策略对于任何需要进行的更改都会更加灵活。

答案 1 :(得分:1)

如果您使用accounts.getAccountInfo检索配置文件,请确保包含“extraProfileFields = phones”参数。默认情况下不会返回手机数组。

http://developers.gigya.com/037_API_reference/020_Accounts/accounts.getAccountInfo

相关问题