iOS Facebook分享

一、创建Facebook的应用
https://developers.facebook.com
1、点击我的应用

image.png

2、点击创建应用
image.png

3、选择应用类型
image.png

4、填写应用名称,联系邮箱
image.png

5、填写基本信息,隐私权政策网址,数据删除回调地址等
image.png

6、添加平台,是iOS的要选择iOS,安卓的选择安卓平台
image.png

image.png

7、添加成功后,iOS的需要把Bundle id填写进去,必需要和项目里的填写一致,然后保存,并且应用模式的开关需要打开
image.png

二、项目配置
1、项目中通过pod集成SDK,手动集成也可以

pod 'FBSDKCoreKit'
pod 'FBSDKShareKit'

2、在info.plist文件中添加以下代码:

<key>FacebookAppID</key>
    <string>应用编号</string>
    <key>FacebookClientToken</key>
    <string>应用密钥</string>
    <key>FacebookDisplayName</key>
    <string>app名称</string>
    <key>CFBundleURLTypes</key>
    <array>
        <dict>
            <key>CFBundleTypeRole</key>
            <string>Editor</string>
            <key>CFBundleURLName</key>
            <string>com.clatia.plamclati</string>
            <key>CFBundleURLSchemes</key>
            <array>
                <string>fb应用编号</string>
            </array>
        </dict>
    </array>
    <key>LSApplicationQueriesSchemes</key>
    <array>
        <string>fbapi</string>
        <string>fb-messenger-api</string>
        <string>fb-messenger-share-api</string>
        <string>fbauth2</string>
        <string>fbshareextension</string>
    </array>

3、在Appdelegate中,导入#import <FBSDKCoreKit/FBSDKCoreKit.h>

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    [[FBSDKApplicationDelegate sharedInstance] application:application didFinishLaunchingWithOptions:launchOptions];
    return YES;
}

- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString*, id> *)options{
    BOOL result = [[FBSDKApplicationDelegate sharedInstance] application:app openURL:url sourceApplication:options[UIApplicationOpenURLOptionsSourceApplicationKey] annotation:options[UIApplicationOpenURLOptionsAnnotationKey]];
    return result;
}

4、在进行分享的地方处理逻辑

FBSDKShareLinkContent*linkContent = [[FBSDKShareLinkContent alloc]init];
linkContent.contentURL= [NSURL URLWithString:@"分享链接"];
linkContent.quote = @"描述信息";
    
FBSDKShareDialog *shareDialog = [[FBSDKShareDialog alloc]init];
// 需要指定模式,否则会调起web分享
shareDialog.mode = FBSDKShareDialogModeNative;
if (![shareDialog canShow]) {
    shareDialog.mode = FBSDKShareDialogModeWeb;
}
shareDialog.shareContent = linkContent;
shareDialog.delegate = self;
shareDialog.fromViewController = self;
[shareDialog show];

5、实现代理方法
分享后代理方法总是回调到sharerDidCancel,有知道原因和解决方法的小伙伴麻烦告知下

#pragma mark - FBSDKSharingDelegate
- (void)sharer:(id<FBSDKSharing>)sharer didCompleteWithResults:(NSDictionary<NSString *,id> *)results {
    NSString *postId = results[@"postId"];
    FBSDKShareDialog *dialog = (FBSDKShareDialog *)sharer;
    if (dialog.mode == FBSDKShareDialogModeBrowser && (postId == nil || [postId isEqualToString:@""])) {
        // 如果使用webview分享的,但postId是空的,
        // 这种情况是用户点击了『完成』按钮,并没有真的分享
        NSLog(@"Cancel");
    } else {
        NSLog(@"Success");
    }
}

- (void)sharer:(id<FBSDKSharing>)sharer didFailWithError:(NSError *)error {
    FBSDKShareDialog *dialog = (FBSDKShareDialog *)sharer;
    if (error == nil && dialog.mode == FBSDKShareDialogModeNative) {
        // 如果使用原生登录失败,但error为空,那是因为用户没有安装Facebook app
        // 重设dialog的mode,再次弹出对话框
        dialog.mode = FBSDKShareDialogModeBrowser;
        [dialog show];
    } else {
        NSLog(@"Failure");
    }
}

- (void)sharerDidCancel:(id<FBSDKSharing>)sharer {
    NSLog(@"Cancel");
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容