Какой 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

Любая помощь будет оценена для решения проблемы с iOS.

Спасибо поддержка cloudrail

Насколько я знаю, это должен быть тот же URL-адрес, но вам нужно подать заявку на участие в программе "Применить с помощью LinkedIn", чтобы получить полный ответ. Вот список всех доступных полей: https://developer.linkedin.com/docs/fields

Другие вопросы по тегам