web-dev-qa-db-ja.com

FacebookはUIActivityViewControllerに表示されませんが、Twitterは表示されます

私のiOSは8.1.2で、ソーシャル共有にUIActivityViewControllerを使用しています。ボタンをクリックして、UIActivityViewControllerに表示させます

- (IBAction)UIActivityTypeButtonClick:(id)sender {

NSString* text=@"I am sharing this text";
NSArray* sharedArray=@[text];
UIActivityViewController * activityVC=[[UIActivityViewController alloc]initWithActivityItems:sharedArray applicationActivities:nil];
activityVC.excludedActivityTypes=@[];
[self presentViewController:activityVC animated:YES completion:nil];
}

私はこれを手に入れています

enter image description here

メッセージTwitterメールWhatsAppおよびその他ボタンが表示されます。
クリックするともっと見るこれが表示されます。

enter image description here[〜#〜] facebook [〜#〜]はどこにありますか。 iPhoneにFacebookアプリがあり、設定でもIDを使用してセットアップされています。しかし、Facebookがここに表示されることはありません。 Twitterはそうします。これはバグですか、それとも何ですか?提案してください

ありがとう

16

Facebookが4月24日にアプリを更新したときに最初にこれを見ました。 Facebookアプリがインストールされている限り、Facebookへのプレーンテキスト共有は機能しません。削除すると、再び利用できるようになります。

URLまたは画像をプレーンテキストと一緒に共有しようとすると、オプションとしてFacebookが表示されますが、テキストフィールドは空白になります。画像やURLは問題なく添付されます。

この問題を再現するサンプルプロジェクトをgithubに投稿しました。

https://github.com/djr/UIActivityViewController-Facebook

これは答えではありませんが、問題の原因がFacebookアプリであることは明らかです。

編集:

理想的ではありませんが、回避策を作成しました。これを機能させるには、画像またはURLを添付する必要があることを忘れないでください。

  1. ユーザーがFacebookアプリをインストールしているかどうかを検出します。もしそうなら、彼らにある種の情報メッセージを与えてください。

    BOOL facebookIsInstalled = [[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"fb://"]];
    BOOL isUserLoggedInWithFacebook = [SLComposeViewController isAvailableForServiceType:SLServiceTypeFacebook];
    
    if(isUserLoggedInWithFacebook && facebookIsInstalled)
    {
        // Explain that they have to copy and paste in order to share on Facebook
    }
    
  2. UIActivityItemProviderのサブクラスを作成し、オーバーライドします

    - (id)activityViewController:(UIActivityViewController *)activityViewController itemForActivityType:(NSString *)activityType
    {
        NSString *stringToShare = @"string to share";
    
        if([activityType isEqualToString:UIActivityTypePostToFacebook] ||
           [activityType isEqualToString:@"com.facebook.Facebook.ShareExtension"] ||
           [activityType.lowercaseString rangeOfString:@"facebook"].length) 
           // Because who knows when they are going to change the activityType string?
        {
            // Automatically copy the text for them
            [[UIPasteboard generalPasteboard] setString:stringToShare];
        }
    
        return stringToShare;
    }
    
  3. 共有するには、Facebookのテキストフィールドに貼り付ける必要があることをユーザーに伝えます。

  4. Facebookでそれを責めなさい。

19
djr

Facebookはあなたに彼らのSDKを使用してほしいと思っています。彼らは最初のテキストを設定する機能をブロックしました。 (方法はわかりません。)同様の投稿で私の答えを確認してください。

FacebookのUIActivityViewControllerがデフォルトのテキストを表示しない

(Facebookからの)望ましい解決策は、SDKを使用することです。

3

Djrが報告した内容を確認します-FBアプリのテキストが共有されなくなった場合。 FBアプリを削除し、テキストと画像の両方の作品を共有するようになりました。

3
Tim Simeonov
NSString* text=@"I am sharing this text";
NSURL *myWebsite = [NSURL URLWithString:@"http://www.website.com/"];
//  UIImage * myImage =[UIImage imageNamed:@"myImage.png"];
NSArray* sharedArray=@[text,myWebsite];
 UIActivityViewController * activityVC=[[UIActivityViewController alloc]initWithActivityItems:sharedArray applicationActivities:nil];
NSArray *excludedActivities = @[];

activityVC.excludedActivityTypes=excludedActivities;
[self presentViewController:activityVC animated:YES completion:nil];
2
Arpit Lokwani

Facebook共有ボタンを表示するには、アクティビティアイテムの配列に画像を追加する必要があります...これはApple側のバグである可能性がありますが、この問題に関するオープンレーダーは見ていません。

また、iOS 8.3では、何らかの理由でテキストをFacebookに追加できないことに注意してください。テキストを追加すると、空白のテキストフィールドにのみ表示されます。

UIImage *image = [UIImage imageNamed:@"__some_image__file"];

UIActivityViewController *activityViewController = [[UIActivityViewController alloc] initWithActivityItems:@[image]
                                                                                     applicationActivities:nil];

[self presentViewController:activityViewController animated:YES completion:nil];
1
Shams Ahmed