web-dev-qa-db-ja.com

「このアイテムは共有できません。別のアイテムを選択してください。」 WhatsApp iOS共有拡張機能の失敗メッセージ

このバグは、2016年5月23日にWhatsAppチームによって修正されました(ビルド番号2.16.4)。

WhatsAppにUIActivityViewControllerを使用してNSStringオブジェクトを共有できません。

以下のコードを使用して共有しようとしました。ただし、リストから連絡先を選択すると、「This item cannot be shared. Please select a different item. "

[〜#〜] code [〜#〜]

NSString *shareText = @"Temp text to share";
NSArray *itemsToShare = @[shareText];

UIActivityViewController *activityVC = [[UIActivityViewController alloc] initWithActivityItems:itemsToShare applicationActivities:nil];

WhatsAppをバージョン2.16.2に更新した後、この問題に直面しています

35
santhu

WhatsAppチームからの返信を受け取りました

-WhatsAppサポート-

こんにちは、

遅れて申し訳ありません!私たちは最近多くのメールを受け取りました、そして私たちはそれらすべてに答えるために最善を尽くします。お待ちいただいてありがとうございます。

問題についてご連絡いただきありがとうございます。 WhatsAppの将来のバージョンで修正される予定です。残念ながら、今後のスケジュールについてコメントすることはできません。申し訳ありません。 WhatsAppの継続的な忍耐とサポートに感謝します。

乾杯、ハンス

したがって、彼らはバグを認め、次のリリースでこれを修正します。

考えられる回避策=>

  • それまでは、UrlSchemesを使用してプレーンテキストとURLを共有できます。 Spydy's answer に従ってください。
    [〜#〜]または[〜#〜]
  • WhatsappアイコンでUIActivityCategoryShareとしてactivityCategoryでUIActivityのサブクラスを作成できます。次に、ユーザーがそれを選択すると、urlschemesを使用してテキストを共有します。このために JBWhatsAppActivity
    [〜#〜]または[〜#〜]
  • URLを共有するためにNSUrlオブジェクトを共有するだけです。修正が完了したら、プレーンテキストとURLの共有に戻すことができます。
21
santhu

共有しようとしているアイテムのローカルURLを共有してみてください。たとえば、pdfを共有する場合、NSDataまたはDataオブジェクトを共有しようとしないでください。WhatsAppはそのエラーを表示します。代わりに、ローカルURLを共有すると、WhatsAppはそれを認識し、適切に共有します。

データオブジェクトを共有しようとすると、ネイティブメール、Gmail、Slack、GDriveなどを含む多くのアプリがPDFを認識することに注意する必要があります。

例えば:

PDFをダウンロードした後、そのURLをfileURLという変数にバインドします。

var fileURL = URL(string: url)
    let destination: DownloadRequest.DownloadFileDestination = { _, _ in
        let documentsURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0]
        fileURL = documentsURL.appendingPathComponent("AWESOME_PDF.pdf")
        return (fileURL!, [.removePreviousFile, .createIntermediateDirectories])
    }

次に、代わりにfileURLを単純に共有できます。

let activityViewController = UIActivityViewController(            
      activityItems: [fileURL!],
      applicationActivities: nil
)

WhatsAppはPDFを認識します。

お役に立てれば!

8
Mert Kahraman

whatsappを更新した後、同じ問題に直面しています。 whatsappで「cancel」を押しても、完了ブロックは成功を示します。私は「WFActivitySpecificItemProvider」と「WFActivitySpecificItemProvider」を使用して解決しましたwhatsappで共有した後、activityViewControllerを破棄し、urで共有します。 WFActivitySpecificItemProvideractivityViewControllerクラスを https: //github.com/wileywimberly/WFActivitySpecificItemProvider

ここに私のコードがあります

- (void)share{

NSString *defaultMessage = @"your message may contain url";

// Use a dictionary
WFActivitySpecificItemProvider *provider1 =
[[WFActivitySpecificItemProvider alloc]
 initWithPlaceholderItem:@""
 items:@{
         WFActivitySpecificItemProviderTypeDefault : defaultMessage,
         UIActivityTypePostToFacebook : defaultMessage,
         UIActivityTypeMail : defaultMessage,
         UIActivityTypeMessage : defaultMessage,
         @"com.linkedin.LinkedIn.ShareExtension":defaultMessage,
         UIActivityTypePostToTwitter : defaultMessage

         }];


// Use a block
WFActivitySpecificItemProvider *provider2 =
[[WFActivitySpecificItemProvider alloc]
 initWithPlaceholderItem:@""
 block:^(NSString *activityType){

     if ([activityType isEqualToString:@"net.whatsapp.WhatsApp.ShareExtension"]) {


         [avc dismissViewControllerAnimated:NO completion:nil];

         dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 1 * NSEC_PER_SEC), dispatch_get_main_queue(), ^{



             NSString *string = [NSString stringWithFormat:@"whatsapp://send?text=%@",defaultMessage];
             NSURL *url = [NSURL URLWithString:[string stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
             [[UIApplication sharedApplication] openURL: url];


         });
     }

     return defaultMessage;
 }];


avc = [[UIActivityViewController alloc]
       initWithActivityItems:@[provider1, provider2]
       applicationActivities:nil];

[avc dismissViewControllerAnimated:YES completion:nil];
[avc setValue:sharingHeader forKey:@"subject"];

[avc setCompletionHandler:^(NSString *activityType, BOOL completed) {

    if (activityType) {


        NSLog(@"activity: %@ completed: %@",activityType,completed ? @"YES" : @"NO");


    } else {


        NSLog(@"No activity was selected. (Cancel)");
    }

}];

[self presentViewController:avc animated:YES completion:nil];
}
8
Spydy

WhatsAppは、2016年5月23日付の更新(ビルド番号2.16.4)でこのバグを修正しました。

公式ソースからは報告されていませんが、コードでテストしました-正常に動作します。

2

Whatsappの最新バージョンでは、テキストとURLの両方を同時に共有することはできません。

私は以下のコードを試しました

NSArray *activityItems= @[someText,[NSURL URLWithString:@"http://www.google.com"]];

このコードを使用すると、URLリンクのみを共有できます。whatsAppは「someText」テキストを除外しました。

しかし、他の共有アプリ(SMSなど)はテキストとURLの両方を共有できます。

whatsAppがこの問題をすぐに修正することを願っています。

0
Avaan

カスタムの IActivityItemSource でこの問題に遭遇しました。ここでは、ほとんどのプロバイダーがkUTTypeDataの代わりにdataTypeIdentifierForActivityTypeデリゲートメソッドを理解しているkUTTypeTextを返していました。単純なケースのオーバーライドにより、私のケースの問題が修正されました。誰かがそれを見た場合、上記のエラーが飛び出る可能性があるちょうど別の理由。

open func activityViewController(_ activityViewController: UIActivityViewController, dataTypeIdentifierForActivityType activityType: UIActivityType?) -> String {
    switch activityType {
    case UIActivityType(rawValue: "net.whatsapp.WhatsApp.ShareExtension"):
        return kUTTypeText as String
    default:
        return kUTTypeData as String
    }
}
0
Mark Thormann