it-swarm.com.de

UIActivityViewController für Facebook zeigt keinen Standardtext an

Ich verwende einen UIActivityViewController, der einige Standardtexte und einen Link enthält. Bei allen sozialen Medien (SMS, E-Mail, Twitter) werden der Standardtext und die URL angezeigt. Bei FB, während das URL-Bild angezeigt wird, wird der Standardtext jedoch nicht angezeigt (er ist nur leer). Unten ist der Code:

    NSString *shareStr = [NSString stringWithFormat:@""some text"];
    NSURL *website = [NSURL URLWithString:@"website"];
    NSArray *shareAray = @[shareStr,website];

    [self viewWillDisappear:YES];

    UIActivityViewController *activityController = [[UIActivityViewController alloc]initWithActivityItems:shareAray
                                                                                    applicationActivities:nil];

    if([activityController respondsToSelector:@selector(popoverPresentationController)] )
        activityController.popoverPresentationController.barButtonItem = self.shareButton;


    [self presentViewController:activityController
                       animated:YES completion:nil];

    [activityController setCompletionHandler:^(NSString *activityType, BOOL completed){
        if (!activityType || UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
        {
            [self viewWillAppear:YES];
        }
    }];

Update: Wie bereits erwähnt, lässt FB keine Vorabfüllung mehr zu. Hier ist ein weiterer Link zu einem Video, das Beispiele dafür gibt, was erlaubt ist und was nicht: https://developers.facebook.com/docs/apps/review/prefill

43
C6Silver

Es scheint, dass Facebook nicht mehr möchte, dass Entwickler Beiträge mit Text vorfüllen. Von https://developers.facebook.com/docs/sharing/ios#ios-integration :

Die Verwendung des iOS-Freigabeblatts unterliegt den Facebook-Plattformrichtlinien, einschließlich Abschnitt 2.3, der besagt, dass Apps möglicherweise nicht vorab gefüllt werden. Im Zusammenhang mit dem Freigabeblatt bedeutet dies, dass Apps das ursprüngliche Textfeld des Freigabeblatts nicht mit Inhalten füllen können, die zuvor von Personen nicht eingegeben wurden, als sie die App verwendeten.

Anscheinend würden Devs lieber das SDK verwenden:

Sie können zwar die native API des iOS-View-Controllers (Freigabeblatt) direkt verwenden, es gibt jedoch mehrere Gründe, das native iOS-Freigabedialogfeld des Facebook-SDK zu verwenden. Mit dem systemeigenen Freigabedialogfeld können Sie schnell testen, ob sich Benutzer auf ihren iOS 6+ -Geräten bei Facebook angemeldet haben. Diese API verwendet auch denselben Stilblock wie andere Teile des Facebook SDK.

45

Ich habe einen Trick gemacht, um Text und Bilder von UIActivityViewController in iOS zu teilen. Zuerst muss ich herausfinden, ob der Benutzer das Facebook-Symbol von UIActivityView angeklickt hat, und dann den Freigabedialog von Facebook mit Text und Bild öffnen. Dies ist die einzige Möglichkeit, Text und Bilder gemeinsam zu nutzen. Unten ist mein Code. Ich hoffe, das kann den Entwicklern Zeit sparen. Da Facebook die Richtlinien geändert hat und es sehr schwer ist, den Text vor dem Ausfüllen zu teilen. 

Bitte fügen Sie UIActivityItemSource in der .h-Datei als Stellvertreter hinzu

Wird aufgerufen, wenn der Benutzer auf die Share-Schaltfläche klickt, um UIActivityViewController anzuzeigen.

NSString *textObject = [NSString stringWithFormat:@"%@, %@",shareString,timeDuration];
NSMutableArray *activityItems = [NSMutableArray arrayWithObjects:self, textObject, shareImage, nil];
activityController = [[UIActivityViewController alloc] initWithActivityItems:activityItems applicationActivities:nil];
[self presentViewController:activityController animated:YES completion:nil];

Und wenn der Benutzer auf das Facebook-Symbol klickt.

pragma mark - UIActivityItemSource-Protokoll

- (id)activityViewController:(UIActivityViewController )activityViewController itemForActivityType:(NSString )activityType {

    if ([activityType isEqualToString:UIActivityTypePostToFacebook]) {

        [self dismissViewControllerAnimated:activityController completion:nil];
        [self performSelector:@selector(postToFacebook) withObject:self afterDelay:1.0];}
    return nil;
}

-(void)postToFacebook {

    [FBSDKSettings setAppID:@""];
    NSArray *imagesListingArray = [[item objectForKey:@"imgs"] valueForKey:@"img"];
    NSString * shareImage = [imagesListingArray objectAtIndex:0];

    FBSDKShareLinkContent *content = [[FBSDKShareLinkContent alloc] init];
    content.contentTitle = @"F-Spot";
    content.contentDescription = [NSString stringWithFormat:@"%@  %@", [item valueForKey:@"event_name"],[item valueForKey:@"duration"]];
    content.imageURL = [NSURL URLWithString:shareImage];

    FBSDKShareDialog *shareDialog = [[FBSDKShareDialog alloc] init];
    shareDialog.mode = FBSDKShareDialogModeNative;
    if(shareDialog.canShow) {
        shareDialog.mode = FBSDKShareDialogModeFeedBrowser;
    }
    shareDialog.shareContent = content;
    shareDialog.delegate = self;
    [shareDialog show];

}
5
Kashif

Ich habe festgestellt, dass es passiert, wenn Sie die Facebook-App installiert haben. Durch das Entfernen der Facebook-App zeigt die UIActivityViewController den vorgefüllten Text korrekt an und auch die Bildvorschau ist unterschiedlich. Es zeigt die Site-URL am unteren Rand des Bildes.

3
odm

Basierend auf der @Kashifs-Lösung. Hier ist eine Version in Swift 4.2, Xcode 10 und FacebookSDK 4.4.

  import FBSDKShareKit

extension YourViewController: UIActivityItemSource{

    //MARK: - ActionSheet

    func showShareSheet(){
        let shareStr = "Text you want to share"
        let activItems =  [self,shareStr, #imageLiteral(resourceName: "YourImageName")] as [Any]
        let shareSheet = UIActivityViewController(activityItems: activItems, applicationActivities: nil)
        self.shareSheet = shareSheet
        self.present(shareSheet, animated: true, completion: nil)
    }


    //MARK: - FacebookPost

    func postToFacebook() {
        let quote = "Text you want to share"
        if let URL = URL(string: "https://yourURL"){
            let content : LinkShareContent = LinkShareContent(url: URL, quote: quote)
            let dialog = ShareDialog(content: content)
            dialog.mode = .shareSheet
            dialog.presentingViewController = self
            do{
                try dialog.show()
            }catch{
                print("\(error)")
            }
        }
    }


    //MARK: - UIActivityItemSource Protocol

    func activityViewController(_ activityViewController: UIActivityViewController, itemForActivityType activityType: UIActivity.ActivityType?) -> Any?{
        if activityType == UIActivity.ActivityType.postToFacebook{
            self.shareSheet?.dismiss(animated: true, completion: {
                self.postToFacebook()
            })
        }
        return nil
    }

    func activityViewControllerPlaceholderItem(_ activityViewController: UIActivityViewController) -> Any {
        return ""
    }

}//endReferral/Invite-Share
0
Yedy

Diese Erweiterung behebt das Problem, check it out! https://github.com/alexruperez/ARFacebookShareKitActivity

Starten Sie FBSDKShareKit von UIActivityViewController anstelle des Standard-Share-Sheets von Facebook.

0
alexruperez