我使用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示例;有人有解决方案吗?
答案 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