Открывайте документ Microsoft Office непосредственно из моего приложения для iOS для редактирования на месте

Я хочу иметь возможность редактировать файлы Office, размещенные на моем собственном сервере. На месте я имею в виду открыть файл в Office, отредактировать его и получить изменения, отправленные обратно на мое приложение / сервер напрямую.

Я частично добился этого, внедрив Расширение провайдера файлов для отображения моих файлов в приложении "Файлы" (iOS 11+), где оно автоматически запускает приложение Office и возвращает изменения для загрузки на мой сервер. Я также могу просматривать свои файлы из меню Office "Открыть", и редактирование происходит на месте.

Я бы запустил этот поток прямо из моего приложения. Есть идеи?

Я и многие пытались следовать руководству Microsoft по интеграции с Office, но оно работает только для файлов, размещенных в FileShare или OneDrive. Я хочу редактировать файлы, размещенные на моих собственных серверах.

1 ответ

Решение

Мне удалось заставить его работать (iOS 11+):

Для начала вам нужно иметь работающее расширение File Provider для вашего приложения. Который у меня уже был.

Затем добавил в мое главное приложение классы File Provider и File Provider моего расширения. Единственное, что не получилось из-за расширения, это попытка получить доступ к файлообменнику. documentStorageURL, Я исправил это, реализовав геттер внутри моего пользовательского класса:

- (NSURL *)documentStorageURL
{
    return NSFileProviderManager.defaultManager.documentStorageURL;
}

Затем я могу инициализировать его и использовать из основного приложения:

// I created a singleton for my custom FileProvider class
NSURL* url = [FileProvider.sharedFileProvider URLForItemWithPersistentIdentifier:item.itemIdentifier];

// Calling providePlaceholderAtURL is key
[FileProvider.sharedFileProvider providePlaceholderAtURL:url completionHandler:^(NSError * _Nullable error)
 {
     if (error)
     {
         // ...
     }

     // This will download the requested file from my server
     [FileProvider.sharedFileProvider startProvidingItemAtURL:url completionHandler:^(NSError * _Nullable error)
      {
          [APP_DELEGATE hideHUD];

          if (error)
          {
              // ...
          }

          // Now I can use the url to start a UIDocumentInteractionController
          UIDocumentInteractionController * controller = [UIDocumentInteractionController interactionControllerWithURL:url];
          // Call presentOpenInMenuFromRect ...
      }];
}];

Это позволяет Word (и другим приложениям Office и приложениям) отображать "Открыть в Word" вместо "Копировать в Word", что позволяет редактировать на месте непосредственно из моего приложения.

Использование классов моего расширения и вызова providePlaceholderAtURL (который создает скрытый (.myfile.docx.icloud файлы) волшебным образом заставляет Word поверить, что файл поступает из приложения Файлы.

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