Какой URL-адрес необходимо отправить в спецификации AdvancedRequestSpecification Cloudrail, чтобы получить профили LinkedIn Experience или Education? - PullRequest
0 голосов
/ 27 июня 2018

Я реализовал пример входа в систему с помощью LinkedIn Social и успешно получил Id, Name, Email, Gender, PictureUrl, Description и BirthDate, используя пример Github Cloudrail-Xamarin .

Документация предлагает использовать функцию AdvancedRequestSpecification для запроса разделов «Образование» или «Опыт» в профиле LinkedIn. Но только приводит пример с Dropbox.

Какой URL-адрес необходимо отправить в спецификации AdvancedRequestSpecification («url идет сюда»), чтобы получить разделы «Образование» или «Опыт» в профиле LinkedIn?

Ответы [ 2 ]

0 голосов
/ 05 июля 2018

Наконец-то я смог получить дополнительную информацию об 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 выдает исключение:

Примечание: см. Исправление облачного рельса выше

        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_intptr_intptr_intptr_intptr
    • 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

0 голосов
/ 28 июня 2018

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

...