mac - Personaliza la descripción de la alerta de AirDrop en iOS
como activar airdrop en iphone 7 (4)
Tengo el siguiente código para enviar una URL
través de AirDrop
:
NSString* selfUrlScheme = [[[[[[NSBundle mainBundle]
infoDictionary]
valueForKey:@"CFBundleURLTypes"]
objectAtIndex:0]
valueForKey:@"CFBundleURLSchemes"]
objectAtIndex:0];
NSURL* schemeURL = [NSURL URLWithString:
[NSString stringWithFormat:
@"addList:%@,%@",
self.list.uniqueID,
selfUrlScheme]];
NSArray *objectsToShare = @[schemeURL];
controller = [[UIActivityViewController alloc]
initWithActivityItems:objectsToShare
applicationActivities:nil];
// Exclude all activities except AirDrop
NSArray *excludedActivities = @[UIActivityTypePostToTwitter,
UIActivityTypePostToWeibo,
UIActivityTypeAssignToContact,
UIActivityTypeSaveToCameraRoll,
UIActivityTypeAddToReadingList,
UIActivityTypePostToFlickr,
UIActivityTypePostToVimeo,
UIActivityTypePostToTencentWeibo];
controller.excludedActivityTypes = excludedActivities;
[self presentViewController:controller animated:YES completion:nil];
El destinatario recibe el siguiente mensaje:
¿Es posible cambiar el texto de la URL
encuentra después de que ''X quisiera compartir'' a algo más fácil de usar como ''X quisiera compartir una lista contigo''? ¡Gracias por adelantado!
EDITAR
Ahora tengo esto pero todavía produjo el mismo resultado anterior:
AirDropCustomURL *container = [[AirDropCustomURL alloc] initWithUrl:schemeURL];
NSString *message = @"a list";
controller = [[UIActivityViewController alloc] initWithActivityItems:@[message, container] applicationActivities:nil];
@interface AirDropCustomURL : NSObject <UIActivityItemSource>
@property (strong, nonatomic) NSURL *url;
@property (strong, nonatomic) UIImage *productImage;
- (id)initWithUrl:(NSURL *)url;
@implementation AirDropCustomURL
- (id)initWithUrl:(NSURL *)url {
if (self = [super init]) {
_url = url;
}
return self;
}
#pragma mark - UIActivityItemSource
- (id)activityViewControllerPlaceholderItem:(UIActivityViewController *)activityViewController {
//Because the URL is already set it can be the placeholder. The API will use this to determine that an object of class type NSURL will be sent.
return self.url;
}
- (id)activityViewController:(UIActivityViewController *)activityViewController itemForActivityType:(NSString *)activityType {
//Return the URL being used. This URL has a custom scheme (see ReadMe.txt and Info.plist for more information about registering a custom URL scheme).
if (floor(NSFoundationVersionNumber) <= NSFoundationVersionNumber_iOS_6_1) {
return nil;
} else {
if ([activityType isEqualToString:UIActivityTypeAirDrop]) {
return self.url;
}
}
return nil;
}
Esta pregunta ha sido publicada hace mucho tiempo. Intenté la respuesta de @ Ivan así como otras respuestas en la publicación, sin embargo, ¡simplemente no funcionan!
Lo que tengo originalmente es la imagen de la izquierda. Estoy compartiendo datos personalizados a través de AirDrop y miré el título generado por UIActivityController
de forma predeterminada " data-3A4F9D ... ", orz. Lo que quiero lograr es un título más descriptivo para que sea más legible para el destinatario (imagen de la derecha). Parece que es extremadamente similar a su pregunta (aunque estoy compartiendo NSData
mientras usted comparte NSURL
.
Esto es lo que hago, que funciona bastante bien: implementar el siguiente protocolo UIActivityItemSource
dentro de mi UIActivityItemProvider
.
- (NSString *)activityViewController:(UIActivityViewController *)activityViewController
subjectForActivityType:(NSString *)activityType
{
// This returning string is added to the email title
return NSLocalizedString(@"CustomTitle", nil);
}
Si aún tiene este problema, siéntase libre de intentarlo y hágame saber cómo funciona para usted.
Me parece que está usando la description
de la URL
. Intentaría subclasificar NSURL
y anular el método de description
para devolver algo como @"a list"
. No lo intenté, pero parece que podría funcionar ...
EDIT: Encontré esta pregunta que parece ser la misma que la tuya y tiene una respuesta aceptada: Airdrop: hacer que un esquema de URL personalizado sea menos feo para el destinatario
Necesitas seguir el tutorial HERE . Después del encabezado "Una mirada rápida a UIActivityViewController", creo que eso es exactamente lo que está buscando.
UIActivityViewController *controller = [[UIActivityViewController alloc] initWithActivityItems:objectsToShare applicationActivities:nil];
[self presentViewController:controller animated:YES completion:nil];
Tendrá que implementar una clase conforme al protocolo UIActivityItemSource. Aquí hay un ejemplo muy bueno: https://developer.apple.com/LIBRARY/IOS/samplecode/sc2273/Introduction/Intro.html . Eche un vistazo al APLCustomURLContainer en particular. Después de implementar su clase de contenedor de URL, puede agregarla a los elementos de actividad junto con una cadena (que será su mensaje personalizado)
MyURLContainer *container = [[MyURLContainer alloc] initWithURL:yourURL];
NSString *message = @"Your message";
UIActivityViewController activityController = [[UIActivityViewController alloc] initWithActivityItems:@[message, container] applicationActivities:nil];
EDITAR:
Al principio no tenía dos teléfonos para probar eso, así que solo probé para Facebook y Twitter donde está funcionando correctamente, pero para AirDrop puedo confirmar ahora (después de algunas pruebas) que siempre está usando la cadena relativa de NSURL e incluso si anula el método de NSURL, el uso compartido no funcionará, por lo que para AirDrop (las otras actividades como FB están bien) no es posible cambiar ese mensaje con el SDK actual.