2

カスタムボタンのクリックで写真を共有したいのですが、リンクとメッセージを共有できますが、写真の共有に関してはできません。

最新の Facebook SDK フレームワーク (4.15.1) を使用しています。

これは、ボタンクリック内の私のコードです。

 - (IBAction)btnsharecustom:(id)sender {

//Get aws s3 Image.
NSString* strS3ImageURL = @"https://TEST_IMAGE_URL/1473497380077.jpg";

//Convert to URL.
NSURL* url1 = [NSURL URLWithString:strS3ImageURL];

//Convert it into data.
NSData* data = [NSData dataWithContentsOfURL:url1];

//Convert it to image.
UIImage* image = [UIImage imageWithData:data];    

FBSDKSharePhoto *photo = [[FBSDKSharePhoto alloc]init];

photo.image = image;
photo.caption = @"Test Caption";
photo.userGenerated = YES;

FBSDKSharePhotoContent *content = [[FBSDKSharePhotoContent alloc] init];
content.photos = @[photo];
}

このコードをアプリデリゲートに含めました。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.

[[FBSDKApplicationDelegate sharedInstance] application:application
                         didFinishLaunchingWithOptions:launchOptions];    

return YES;
}

//FaceBook URLs.
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url
 sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {

BOOL handled = [[FBSDKApplicationDelegate sharedInstance] application:application
                                                              openURL:url
                                                    sourceApplication:sourceApplication
                                                           annotation:annotation
                ];
// Add any custom logic here.
return handled;
}

このコードも info.plist に含めました

    <dict>
        <key>CFBundleURLSchemes</key>
        <array>
            <string>fb15771408xxx409xx</string>
        </array>
    </dict>

<key>FacebookAppID</key>
<string>15771408xxx409xx</string>
<key>FacebookDisplayName</key>
<string>Cedar iOS</string>
<key>LSApplicationQueriesSchemes</key>
<array>
    <string>fbapi</string>
    <string>fb-messenger-api</string>
    <string>fbauth2</string>
    <string>fbshareextension</string>
    <string>fbapi20130214</string>
    <string>fbapi20130410</string>
    <string>fbapi20130702</string>
    <string>fbapi20131010</string>
    <string>fbapi20131219</string>
    <string>fbapi20140410</string>
    <string>fbapi20140116</string>
    <string>fbapi20150313</string>
    <string>fbapi20150629</string>
    <string>fbapi20160328</string>
    <string>fbauth</string>
    <string>fb-messenger-api20140430</string>
</array>

カスタム ボタンをクリックすると、Facebook アプリまたはサファリ ブラウザが起動しません。

4

3 に答える 3

3

コンテンツをモデリングした後、自分でダイアログを表示する必要があります。

これを追加

[FBSDKShareDialog showFromViewController:self
                          withContent:content
                             delegate:nil];

メソッドの最後まで- (IBAction)btnsharecustom:(id)sender


注: 同期リクエストを使用するため、イメージのダウンロードには時間がかかります。

//Convert it into data.
NSData* data = [NSData dataWithContentsOfURL:url1];

こちらのドキュメントをお読みください https://developer.apple.com/reference/foundation/nsdata/1547245-datawithcontentsofurl

この同期メソッドを使用して、ネットワーク ベースの URL を要求しないでください。ネットワークベースの URL の場合、このメソッドは低速ネットワークで現在のスレッドを数十秒間ブロックする可能性があり、その結果、ユーザー エクスペリエンスが低下し、iOS ではアプリが終了する可能性があります。

この問題の解決策は、ユーザーがボタンをタップする前に画像を非同期的にダウンロードすることです (アップロードする画像が予測可能な場合)。viewDidLoad通常、これはメソッドで行うことができます。このhttps://github.com/rs/SDWebImageライブラリを試して、非同期リクエスト イメージを簡単に作成してください。

于 2016-10-07T07:16:37.987 に答える
0

このコードを試してください。

- (IBAction)btnsharecustom:(id)sender {

    //Get aws s3 Image.
    NSString* strS3ImageURL = @"https://placeholdit.imgix.net/~text?txtsize=15&txt=image1&w=120&h=120";

    //Convert to URL.
    NSURL* url1 = [NSURL URLWithString:strS3ImageURL];

    //Convert it into data.
    NSData* data = [NSData dataWithContentsOfURL:url1];

    //Convert it to image.
    UIImage* image = [UIImage imageWithData:data];

    FBSDKSharePhoto *photo = [[FBSDKSharePhoto alloc]init];

    photo.image = image;
    photo.caption = @"Test Caption";
    photo.userGenerated = YES;

    FBSDKSharePhotoContent *content = [[FBSDKSharePhotoContent alloc] init];
    content.photos = @[photo];
    [FBSDKShareAPI shareWithContent:content delegate:self];
;
}
- (void)sharer:(id<FBSDKSharing>)sharer didCompleteWithResults:(NSDictionary *)results{

}
于 2016-10-07T10:08:55.813 に答える