次の問題は次のとおりです。AirDrop を介してカスタム URL スキームを共有するアプリがあります。
NSMutableString *mutableString = [NSMutableString stringWithString:@"appName://"];
[mutableString appendString:contentProduct.url];
NSURL *airDropUrl = [[NSURL alloc] initWithString:mutableString];
LAAirDropCustomUrl *customUrlSCHEMA = [[LAAirDropCustomUrl alloc] initWithUrl:airDropUrl];
NSArray *activityItems = [NSArray arrayWithObjects:customUrlSCHEMA, nil];
UIActivityViewController *activityController = [[UIActivityViewController alloc] initWithActivityItems:activityItems
applicationActivities:nil];
プロジェクトのターゲットの情報セクションに URL スキームを追加しました。AirDrop を介した共有は問題なく機能します。一方、他のデバイスにアプリがない場合は、デフォルトのアラートが表示され、「デバイス x は、あなたが持っていないアプリで smth を共有しようとしています。appstore から取得しますか?」というメッセージが表示されます。他のデバイスにアプリがない場合は、ブラウザで開くことができる別の URL を送信したいと考えています。
activityItems にデフォルトの NSURL* を追加しようとすると、「デバイス x はこれらの種類のアイテムを受信できません」というエラーが表示されます。
NSURL *airDropUrl = [[NSURL alloc] initWithString:mutableString];
NSArray *activityItems = [NSArray arrayWithObjects:airDropUrl,customUrlSCHEMA , nil];
LAAirDropCustomUrl の実装は次のとおりです。
- (id)initWithUrl:(NSURL *)url {
if (self = [super init]) {
_url = url;
}
return self;
}
- (id)activityViewControllerPlaceholderItem:(UIActivityViewController *)activityViewController {
return self.url;
}
- (id)activityViewController:(UIActivityViewController *)activityViewController itemForActivityType:(NSString *)activityType {
if ([activityType isEqualToString:UIActivityTypeAirDrop]) {
return self.url;
}
return nil;
}