2015-04-24 18 views
39

我正在使用提供一些默認文本和鏈接的UIActivityViewController。所有社交媒體(短信,電子郵件,推特)都會顯示默認文本和網址。但是,在顯示URL圖像時使用FB,默認文本不顯示(只是空白)。下面是代碼:面向Facebook的UIActivityViewController不顯示默認文本

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]; 
     } 
    }]; 

更新: 如前所述在別人下面說,FB不再允許預填充。以下是視頻的另一個鏈接,其中給出了允許和不允許的示例的示例:https://developers.facebook.com/docs/apps/review/prefill

+0

我也發現這個問題與iOS 8.2。 – SanitLee

+0

我在iOS 8.3上也看到了這個,你有問題編號@DanielStorm? – francis

+0

只是爲了確認FB應用程序在這個問題上扮演重要角色。我沒有看到安裝上一個FB應用程序的問題,但最新的。正如@DanielStorm所說的,也許等待新的更新的FB應用程序。 – SanitLee

回答

41

看起來Facebook似乎不再希望開發人員使用文本預先填寫帖子。從https://developers.facebook.com/docs/sharing/ios#ios-integration

使用iOS份額片的受Facebook平臺策略,包括其中指出,應用可能不預填充2.3節。在分享表的上下文中,這意味着應用程序可能不會預先在分享表的initialText字段中填入早些時候人們在使用該應用程序時未輸入的內容。

似乎他們寧願開發者使用SDK:

雖然你可以使用iOS原生視圖控制器API(股板)直接,有幾個原因使用所提供的原生iOS裝置分享對話框由Facebook SDK。使用本地共享對話框提供了一種快速測試人們在他們的iOS 6+設備上登錄Facebook的方式。該API也使用與Facebook SDK其他部分相同的樣式塊。

+8

這使得facebook的份額比以前更少有用... – TheEye

+0

它是一樣的已經使用android年數的政策 – encastellano

+1

如果Facebook API甚至可以正常工作,並且在不支持Facebook的時候它們會得到任何支持,這將有所幫助。 – Craig

-1

我欺騙UIActivityViewController通過將預覽圖像到該共享陣列使用的文本。

+0

它沒有幫助 – mkll

+0

也不會幫助我@mkll – nivritgupta

+0

你能澄清你的意思嗎?「預覽圖像?」 – Warpling

3

我發現它發生在您安裝了Facebook應用程序時。通過刪除Facebook應用程序UIActivityViewController正確顯示預填充文本,圖像預覽也不同。它顯示圖像底部的網站網址。

+2

在iOS9中,Facebook活動不會顯示爲選項,一旦從設備中刪除Facebook應用程序,也不會顯示在「...」列表中。 –

+1

我沒有找到@ E.Freitas的評論是真實的。如果您通過iPhone的設置應用程序登錄Facebook並且沒有安裝Facebook應用程序,那麼UIActivityViewController – Chris

4

我已經完成了一個技巧來分享文本和圖像從UIActivityViewController在iOS中。首先,我需要找到用戶是否點擊了UIActivityView的Facebook圖標,然後用文本和圖像打開Facebook的共享對話框。這是分享文字和圖片的唯一方式。以下是我的代碼。我希望這可以爲開發人員節省時間。由於Facebook已經改變了政策,並且很難分享預填文本。

請.h文件中添加UIActivityItemSource爲代表

這將被調用時,分享按鈕用戶通過點擊顯示UIActivityViewController

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]; 

並且當用戶從它點擊Facebook圖標。

編譯馬克 - UIActivityItemSource協議

- (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]; 

} 
+0

中仍然有一個Facebook共享選項,可以說明postToFacebook功能應該如何工作,因爲它充滿了錯誤,如何(( –

+0

'contentTitle'已棄用:'contentTitle'已從圖表API 2.9棄用] '圖表API 2.9棄用了contentDescription' –