Какой URL-адрес необходимо отправить в спецификации AdvancedRequestSpecification Cloudrail, чтобы получить профили LinkedIn Experience или Education?
Я реализовал пример входа в систему с помощью LinkedIn Social и успешно получил Id, Name, Email, Gender, PictureUrl, Description и BirthDate, используя пример Github Cloudrail-Xamarin.
В документации предлагается использовать функцию AdvancedRequestSpecification для запроса разделов "Образование" или "Опыт" в профиле LinkedIn. Но только дает дропбокс пример.
Какой URL необходимо отправить в AdvancedRequestSpecification("URL идет сюда"), чтобы получить разделы "Образование" или "Опыт" профиля LinkedIn?
2 ответа
Наконец я смог получить дополнительную информацию об Android, но не об iOS.
1) В проекте PCL я добавил интерфейс:
public interface ILinkedIn
{
Task<Model.LinkedInProfile> GetLinkedInProfile();
}
2) В проект Android я добавил следующую реализацию сервиса Dependency
public async Task<Model.LinkedInProfile> GetLinkedInProfile()
{
var profile = new Model.LinkedInProfile();
int numTries = 500;
var service = new LinkedIn(MainActivity.Instance, "blablabla", "blablabla");
new System.Threading.Thread(new System.Threading.ThreadStart(() =>
{
try
{
service.Login();
profile.Description = service.Description;
profile.ImageUrl = service.PictureURL;
var req = new AdvancedRequestSpecification("/people/~:(positions,public-profile-url)?format=json");
var res = service.AdvancedRequest(req);
profile.Exta = Newtonsoft.Json.JsonConvert.DeserializeObject<Model.ExtraProfile>(res.BodyAsString);
service.Logout();
}
catch
{
numTries = 0;
}
})).Start();
while (numTries-- > 0 && profile.Exta == null)
await Task.Delay(250);
return profile;
}
3) В проекте iOS я добавил аналогичную реализацию сервиса Dependency
public async Task<Model.LinkedInProfile> GetLinkedInProfile()
{
var profile = new Model.LinkedInProfile();
int numTries = 500;
CRLinkedIn service = new CRLinkedIn("blablabla", "blablabla");
new System.Threading.Thread(new System.Threading.ThreadStart(() =>
{
try
{
service.Login();
profile.Description = service.GetProfileDescription();
profile.ImageUrl = service.GetPictureURL();
CRAdvancedRequestSpecification req = new CRAdvancedRequestSpecification("/people/~:(positions,public-profile-url)?format=json");
/* Edited to Add the next 3 lines as the cloudrail suggested fix for iOS */
req.Method = @"GET";
req.Headers = new Foundation.NSMutableDictionary();
req.SetBodyAsString("");
/* Finished Editing */
var res = service.AdvancedRequestWithSpecification(req);
profile.Exta = Newtonsoft.Json.JsonConvert.DeserializeObject<Model.ExtraProfile>(res.BodyAsString);
service.Logout();
}
catch
{
numTries = 0;
}
})).Start();
while (numTries-- > 0 && profile.Exta == null)
await Task.Delay(250);
return profile;
}
4) На Android он отлично работает, но на iOS он выдает исключение:
NB: см. Исправление облачного рельса выше.
var res = service.AdvancedRequestWithSpecification(req);
Высказывание:
Objective-C исключение выброшено. Имя: CRUnknownException Причина: ServiceCode Ошибка в функции AdvancedRequestSupporter:advancedRequest в 10, [*** -[NSMutableDictionary setObject:forKey:]: метод отправлен в неинициализированный изменяемый объект словаря] Трассировка собственного стека:
- 0 CoreFoundation 0x000000018532ada4
- 252 1 libobjc.A.dylib 0x00000001844e45ec objc_exception_throw + 56 2 CoreFoundation
0x000000018532a9f0 + 0 3 CloudrailSI
0x0000000108a5a778 - [CRLinkedIn checkForError:] + 316 4
CloudrailSI 0x0000000108a5a2bc - [CRLinkedIn advancedRequestWithSpecification:] + 620 5 LocalJobMarket.iOS
0x00000001047e56d4 wrapper_managed_to_native_ApiDefinition_Messaging_IntPtr_objc_msgSend_IntPtr_intptr_intptr_intptr - 228 6 LocalJobMarket.iOS 0x0000000104773a68 CloudRailSI_CRLinkedIn_AdvancedRequestWithSpecification_CloudRailSI_CRAdvancedRequestSpecification
- 344 7 LocalJobMarket.iOS 0x0000000102f51630 LocalJobMarket_iOS_LinkedIn_iOS__c__DisplayClass0_0__GetLinkedInProfileb__0
- 320 8 LocalJobMarket.iOS 0x00000001030d09cc System_Threading_ThreadHelper_ThreadStart_Context_object + 188 9
LocalJobMarket.iOS 0x00000001030ce744 System_Threading_ExecutionContext_RunInternal_System_Threading_ExecutionContext_System_Threading_ContextCallback_object_bool - 404 10 LocalJobMarket.iOS 0x00000001030ce59c System_Threading_ExecutionContext_Run_System_Threading_ExecutionContext_System_Threading_ContextCallback_object_bool
- 44 11 LocalJobMarket.iOS 0x00000001030ce51c System_Threading_ExecutionContext_Run_System_Threading_ExecutionContext_System_Threading_ContextCallback_object
- 76 12 LocalJobMarket.iOS 0x00000001030d0b34 System_Threading_ThreadHelper_ThreadStart + 52 13 LocalJobMarket.iOS 0x0000000103226ae8 wrapper_runtime_invoke_object_runtime_invoke_dynamic_intptptrrint__intptr_intintr_
- 248 14 LocalJobMarket.iOS 0x00000001050a967c mono_jit_runtime_invoke + 904 15 LocalJobMarket.iOS
0x0000000105126b34 mono_runtime_invoke_checked + 148 16 LocalJobMarket.iOS 0x000000010515e258 start_wrapper - 676 17 libsystem_pthread.dylib 0x0000000184f51220 + 272 18 libsystem_pthread.dylib
0x0000000184f51110 + 0 19 libsystem_pthread.dylib
0x0000000184f4fb10 thread_start + 4
- 252 1 libobjc.A.dylib 0x00000001844e45ec objc_exception_throw + 56 2 CoreFoundation
Любая помощь будет оценена для решения проблемы с iOS.
Спасибо поддержка cloudrail
Насколько я знаю, это должен быть тот же URL-адрес, но вам нужно подать заявку на участие в программе "Применить с помощью LinkedIn", чтобы получить полный ответ. Вот список всех доступных полей: https://developer.linkedin.com/docs/fields