Связанный библиотечный метод C # не принимает параметр реализации - PullRequest
0 голосов
/ 29 августа 2018

Пытаясь реализовать новый Snapchat Creative Kit в Xamarin.iOS, я связал SDK-фрейм с помощью Objective Sharpie. Следуя официальной документации (в которой есть только шаги по реализации swift и obj-c) для других SDK, проблем не возникло - я успешно реализовал Login Kit - я наткнулся на этот код, пытаясь отправить контент в Snapchat.

В частности, в Документации , для отправки содержимого в API используется этот код:

// swift

let snapImage = /* Set your image here */
let photo = SCSDKSnapPhoto(image: snapImage)

let snap = SCSDKSnapPhotoContent(snapPhoto: photo)

let api = SCSDKSnapAPI(content: snap)
api.startSnapping({ (error: Error?) in
/* Error handling */
})

Согласно документам,

SCSDKPhotoSnapContent является реализацией протокола SCSDKSnapContent. Он предоставляет возможность смоделировать фотоснимок для отправки в Snapchat.

Вот моя реализация на C #:

var snapImage = GetCurrentScreenImage();
SCSDKSnapPhoto photo = new SCSDKSnapPhoto(snapImage);
SCSDKPhotoSnapContent snapPhoto = new SCSDKPhotoSnapContent(photo)

SCSDKSnapAPI api = new SCSDKSnapAPI(snapPhoto);
api.StartSnappingWithCompletionHandler((NSError error) =>
{
    // Error handling
});

Проблема в том, что конструктор SCSDKSnapAPI принимает только SCSDKSnapContent, который является абстрактным классом, а не его реализацией, и я получаю сообщение об ошибке:

CS1503 Аргумент 1: невозможно преобразовать из 'SCSDKCreativeKit_Bindings.SCSDKPhotoSnapContent' в 'SCSDKCreativeKit_Bindings.SCSDKSnapContent'

EDIT:

ApiDefinition.cs

[Export("initWithContent:")]
IntPtr Constructor(SCSDKSnapContent content);

Я попытался добавить еще один конструктор, подобный этому:

[Export("initWithContent:SCSDKPhotoSnapContent")]
IntPtr Constructor(SCSDKPhtotoSnapContent content);

Код теперь создается, но я получаю следующий код ошибки от Snapchat при обратном вызове:

SnapEncryptionMetadataUnexpectedStatusCode

1 Ответ

0 голосов
/ 31 августа 2018

Я не смог найти способ правильно реализовать SCSDKSnapContent в Xamarin.iOS. Я нашел обходной путь, такого рода работы. Если вы измените конструктор для SCSDKSnapAPI в библиотеке привязки с SCSDKSnapContent на одну из его реализаций (в моем случае SCSDKPhotoSnapContent), например:

[Export("initWithContent:")]
IntPtr Constructor(SCSDKPhotoSnapContent content);

После этого вы можете правильно вызвать SCSDKSnapAPI в Xamarin

var snapImage = GetCurrentScreenImage();
SCSDKSnapPhoto photo = new SCSDKSnapPhoto(snapImage);
SCSDKPhotoSnapContent snapPhoto = new SCSDKPhotoSnapContent(photo)

SCSDKSnapAPI api = new SCSDKSnapAPI(snapPhoto);
api.StartSnappingWithCompletionHandler((NSError error) =>
{
    // Error handling
});
...