5

次の問題は次のとおりです。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;
  }
4

1 に答える 1