ios - texto - no puedo activar imessage con mi numero
El archivo de extensión personalizado no se abre en iMessage (3)
En mi aplicación, necesito enviar algunos archivos de datos personalizados de un dispositivo a otro, y estoy tratando de hacerlo con Mail, iMessage / Message y Airdrop.
Esto funciona bien con Mail y Airdrop pero con iMessage y va bien, pero en el lado de recepción, no puedo abrir los archivos. Simplemente no me está permitiendo hacer nada con eso.
¿¿Algunas ideas??
Así es como se ve mi tipo de documento:
<key>CFBundleDocumentTypes</key>
<array>
<dict>
<key>CFBundleTypeIconFile</key>
<string>abc.png</string>
<key>CFBundleTypeName</key>
<string>ABC Custom Data type</string>
<key>CFBundleTypeRole</key>
<string>Viewer</string>
<key>Handler Rank</key>
<string>Owner</string>
<key>LSItemContentTypes</key>
<array>
<string>com.company.abc.wd</string>
</array>
</dict>
</array>
Así es como estoy enviando los datos:
NSMutableDictionary * dict = [NSMutableDictionary dictionary];
[dict setObject:currentDataSet forKey:@"actualData"];
NSData * meetingData = [NSKeyedArchiver archivedDataWithRootObject:dict];
Meeting * dataItem = [[Meeting alloc]initWithData:meetingData
type:@"com.abc.xyz.wd" subject:@"Meeting"
previewImage:[UIImage imageNamed:@"appIcon.png"]];
UIActivityViewController * activityController =
[[UIActivityViewController alloc]initWithActivityItems:@[dataItem]
applicationActivities:nil];
activityController.excludedActivityTypes =
@[UIActivityTypePostToTwitter, UIActivityTypePostToWeibo];
[self presentViewController:activityController animated:YES completion:nil];
El valor en su Info.plist para la clave LSItemContentTypes
debe ser igual a lo que declara su objeto Meeting.
Presumiblemente, su objeto Meeting se adhiere al protocolo UIActivityItemSource
. Asegúrese de que el valor que devuelve (del método delegado activityViewController:dataTypeIdentifierForActivityType:
coincida con el valor que ha declarado legible en su Info.plist
.
Me encontré con este post mientras buscaba una solución similar. Pude enviar por correo electrónico archivos personalizados desde mi aplicación y abrirlos por correo electrónico o usarlos con AirDrop. Si lo envié a través de iMessage, incluso apareció con mi ícono personalizado, pero cuando lo pulsé en iMessage no sucedió nada.
Tenga en cuenta que necesita algo como lo siguiente en su archivo plist (en ¿Cómo asocio los tipos de archivos con una aplicación de iPhone? )
<key>UTExportedTypeDeclarations</key>
<array>
<dict>
<key>UTTypeConformsTo</key>
<array>
<string>public.plain-text</string>
<string>public.text</string>
</array>
<key>UTTypeDescription</key>
<string>Molecules Structure File</string>
<key>UTTypeIdentifier</key>
<string>com.sunsetlakesoftware.molecules.pdb</string>
<key>UTTypeTagSpecification</key>
<dict>
<key>public.filename-extension</key>
<string>pdb</string>
<key>public.mime-type</key>
<string>chemical/x-pdb</string>
</dict>
</dict>
NOTA: Tuve algo muy similar para mi aplicación, PERO en UTTypeConformsTo, solo tenía public.data ya que mis archivos son archivos de datos comprimidos.
Descubrí que al agregar public.text como segundo elemento de la matriz, se podría procesar en iMessage. En una nota adicional, si agregué public.plain-text como tercer elemento, mi archivo terminó con un ícono de Páginas en lugar de mi ícono (por lo tanto, lo eliminé)
Espero que esto ayude a alguien. Me ha llevado horas llegar al fondo.
Esta respuesta es correcta en que el documento personalizado se puede abrir desde Mensajes si se ajusta a public.text
. El inconveniente de esta solución es que la vista previa del documento es un texto sin procesar, que puede no ser el resultado deseado.
Los documentos que se ajustan a public.data
se pueden abrir desde la aplicación de Mensajes sin que se public.data
vista previa como texto sin formato mediante la creación de una Extensión de Vista Rápida de Vista Rápida. No hay mucha documentación sobre cómo construir una extensión de vista previa de vista rápida, pero es bastante sencillo:
En Xcode, elija,
File
>New
>Target
.Elija Quick Look Preview Extension , dé un nombre a su extensión y haga clic en Finalizar .
En
info.plist
para la extensión recién creada, agregue un nuevo elemento enNSExtension
>NSExtensionAttributes
>QLSupportedContentTypes
, y establezca el valor de este elemento en el tipo de documento personalizado de su aplicación. Por ejemplo:... <key>NSExtension</key> <dict> <key>NSExtensionAttributes</key> <dict> <key>QLSupportedContentTypes</key> <array> <string>com.company.abc.wd</string> </array> <key>QLSupportsSearchableItems</key> <true/> </dict> <key>NSExtensionMainStoryboard</key> <string>MainInterface</string> <key>NSExtensionPointIdentifier</key> <string>com.apple.quicklook.preview</string> </dict> ...
Use
MainInterface.storyboard
yPreviewViewController
para definir el diseño de su vista previa personalizada de Quick Look. Más específicamente, lea los datos de la URL proporcionada en la funciónpreparePreviewOfFile
y rellene el ViewController en consecuencia. Un breve ejemplo (en Swift 4):func preparePreviewOfFile(at url: URL, completionHandler handler: @escaping (Error?) -> Void) { do { let documentData = try Data(contentsOf: url) // Populate the ViewController with a preview of the document. handler(nil) } catch let error { handler(error) } }
Algunos errores que encontré al crear mi extensión:
El identificador de UTI exportado tenía que ser todo en minúsculas. Cuando algunos de los caracteres eran mayúsculas, la vista previa de Vista rápida nunca se mostraba, a pesar de que usé el mismo uso de mayúsculas en mi Extensión de vista previa de Vista rápida.
Las Extensiones de Vista Rápida de Vista Rápida no están autorizadas para enlazar contra bibliotecas dinámicas. Si una biblioteca dinámica está vinculada, la vista previa de Vista rápida no se cargará.
El Quick View ViewController no tiene permitido tener ningún botón. Si contiene un botón, la vista previa de Vista rápida no se cargará.
Recursos adicionales: