Это версия Objective C о том, как сохранить изображение в Cloudkit
. Это заняло довольно много места, поскольку информации не так много, но это работает
if([results count] <= 0) {
NSLog(@"this Record doesnt exist so add it ok!! %@", error);
CKRecordID *wellKnownID = [[CKRecordID alloc]
initWithRecordName:idString];
CKRecord *entitiesName = [[CKRecord alloc] initWithRecordType:@"mySavedDetails"
recordID:wellKnownID];
[entitiesName setObject:idString
forKey:@"myDetailsId"];
[entitiesName setObject:self.myName.text
forKey:@"myName"];
if (myUIImage.image != nil)
{
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,
NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString* path = [documentsDirectory stringByAppendingPathComponent:
@"test.png" ];
NSData* data = UIImagePNGRepresentation(myUIImage.image.image);
[data writeToFile:path atomically:YES];
//so we get the full path of the uiimage
NSLog(@"Path details %@",path);
NSURL* myImagePath = nil;
myImagePath =
[[NSBundle mainBundle] URLForResource:path
withExtension:@"png"];
//here we change the path of Image which is a string to a URL
NSURL *yourURL = [NSURL fileURLWithPath:path];
CKAsset* myImageAsset = nil;
myImageAsset =
[[CKAsset alloc] initWithFileURL:yourURL];
[entitiesName setObject: myImageAsset
forKey:@"myImage"];
[publicDatabase saveRecord: entitiesName
completionHandler:^(CKRecord *savedState, NSError *error) {
if (error) {
NSLog(@"ERROR SAVING: %@", error);
}
}];
}
}
Протокол шлюза XMPP, о котором Вы услышали, скорее всего, относится к транспортам. Транспорт является сервером, который соединяется и с сервером XMPP и с non-XMPP сервером. Путем выполнения транспорта я могу использовать свой клиент Бессмысленных данных, чтобы говорить с кем-то использующим, скажем, MSN Messenger.
Транспорт обычно соединяется однажды с удаленной сетью для каждого JID, который это видит как онлайн. Таким образом, это - Ваша опция 2 наоборот. Это вызвано тем, что нет никаких особых отношений между транспортом и non-XMPP сетью; транспорт просто действует как набор постоянных клиентов. Чтобы это работало, клиенты XMPP должны сначала зарегистрироваться в транспорте, дав данные для входа в систему для удаленной сети, и позволив транспорту просмотреть их присутствие.
Единственная причина это имеет шанс масштабирования лучше, состоит в том, что может быть много транспортов для той же удаленной сети. Например, мой сервер Бессмысленных данных мог выполнить транспорт к MSN, другой сервер Бессмысленных данных мог выполнить другой, и так далее, каждое обеспечение соединения для различного подмножества пользователей XMPP. В то время как это распространяет нагрузку на сторону Бессмысленных данных, и выравнивание нагрузки в Вашей системе может распространить загрузку также, все еще требуется много соединений между этими двумя системами.
В Вашем случае, потому что (я принимаю) сотрудничает non-XMPP сторона вещей, помещение интерфейса сервера XMPP на non-XMPP сервере вероятно Ваш лучший выбор. Тот интерфейс сервера подходит лучше всего для управления отображением между XMPP JIDs и как это JID появится в его собственной сети, вместо того, чтобы вынудить пользователей XMPP зарегистрироваться и так далее.
В случае, если Вы не видели их, Вы могли бы найти их полезными:
Надежда, которая помогает.
Я также работаю над аналогичной системой.
Я иду со шлюзом/компонентным маршрутом. Я посмотрел на несколько опций и уладил споры с этим.
Шлюз является в основном компонентом с определенной целью соединить Jabber/XMPP мостом с другой сетью. Необходимо будет создать большинство вещей, которые Вы считаете само собой разумеющимся при использовании XMPP в качестве клиента. Материал как управление списком.
Существует очень мало справки онлайн на фактическом дизайне и здании компонента. Как вышеупомянутый ответ я нашел что xmpp протоколы/расширения помогать. Основное быть:
Прочтение их покажет Вам, какой XEPs Вы, как будут ожидать, сможете обработать. Проигнорируйте материал, который будет обработан сервером, к которому Ваш компонент будет attched.
Это - позор, что Djabberd имеет такую плохую документацию, поскольку их система "всего является модулем", дал возможность бэкенда сервера, мог взаимодействовать через интерфейс непосредственно к другой сети. Я не сделал прогресса на этом.
Еще один подход должен работать с Вашим поставщиком сервера XMPP. Большинство имеет внутренние API, которые делают присутствие введения возможным из приложений сторонних производителей. Например, Бессмысленные данные, которые XCP обеспечивает API для этого, это действительно просто в использовании.
(Раскрытие: Я работаю на Jabber, Inc, компанию позади Jabber XCP),
Существует два основных типа соединений сервер-сервер (s2s). Первый называется шлюзом или транспортом, но это одно и то же. Вероятно, это именно то, что вам нужно. Мне не удалось найти конкретную документацию для стороны, отличной от XMPP, но то, как XMPP думает о переводе на устаревшие серверы, можно найти на http://xmpp.org/extensions/xep-0100.html . Второй тип на самом деле не объясняется ни в каких дополнительных XEP - это обычные соединения XMPP s2s. Ищите «Связь между серверами» в RFC 3920 или RFC 3920bis для получения последнего чернового обновления.
Поскольку у вас есть собственные пользователи и присутствие на вашем сервере, и это не XMPP, концепции не будут отображаться полностью к модели XMPP. Вот тут-то и вступает в дело работа транспорта. Вам необходимо выполнить перевод вашей модели в модель XMPP. Хотя это некоторая работа, все решения должны принимать вы.
Это подводит нас прямо к одному из ключевых вариантов дизайна - вам действительно нужно решить, какие вещи вы собираетесь отображать в XMPP из своего сервиса, а какие нет. Эти описания функций и вариантов использования определяют общую структуру. Например, это как транспорт для общения со службами чата AOL или MSN? Затем вам понадобится способ сопоставить их эквивалент реестров, присутствия и хранения информации о сеансах вместе с логинами и паролями от ваших локальных пользователей на удаленный сервер. Это связано с тем, что ваш транспорт должен будет притвориться этими пользователями и должен будет войти в систему для них.
Или, может быть, вы просто мост s2s к чужой шахматной игре на основе XMPP, поэтому вы не Мне не нужен логин на удаленном сервере, и он может действовать аналогично почтовому серверу и передавать информацию туда и обратно. (При обычных соединениях s2s единственной сессией, которая будет сохранена, будет аутентификация SASL, используемая с удаленным сервером, но на уровне пользователя s2s просто поддерживает соединение, а не сеанс входа в систему.)
Другими факторами являются масштабируемость и модульность на твой конец. Вы решили некоторые проблемы масштабируемости. Взгляните на установку нескольких транспортов для балансировки нагрузки. Для модульности посмотрите, где вы хотите принимать решения о том, что делать с каждым пакетом или действием. Например, как вы обрабатываете и отслеживаете данные подписки? Вы можете положить его на свой транспорт, но тогда использование нескольких транспортных средств станет сложнее. Или, если вы примете это решение ближе к своему главному серверу, вы можете иметь более простые транспорты и использовать некоторый общий код, если вам нужно поговорить с другими службами, кроме XMPP. Компромисс - более сложный главный сервер с большим потенциалом уязвимости.