Facebook SDK iOS端相关接口接入

打印 上一主题 下一主题

主题 796|帖子 796|积分 2388

前言:
近日接Facebook SDK iOS时发现Facebook官网最新的SDK已经部门改成Swift语言了,官方文档也是只看到Swift的相关代码,没找到OC的代码,但是我要接的项目都是OC语言写的,为此捣鼓了半天总算乐成接好了,记载一下以免忘记。
正文:
1.起首要登录Facebook账号把项目相关的配置好,这些步骤根据官方文档一步步做就好了,很简单不多做赘述。
官方文档

2.将SDK导入项目中,方法很多,我是用cocoapod导入
  1. pod 'FBSDKCoreKit'
  2. pod 'FBSDKLoginKit'
  3. pod 'FBSDKShareKit'
复制代码
根本上导入这三个就够了,详细根据项目需求导入。
3.由于Facebook SDK很多改成Swift的了,而我们的项目照旧OC的,以是需要混编。

  • 添加 Swift 文件

    • 在 Xcode 的左侧项目导航栏中右键点击项目名称,选择 New File。
    • 选择 Swift File,然后点击 Next。
    • 输入文件名,然后点击 Create。

  • 创建桥接头文件

    • 在添加第一个 Swift 文件时,Xcode 会询问是否创建一个桥接头文件(Bridging Header)。选择 Yes。
    • Xcode 会自动创建一个名为 YourProjectName-Bridging-Header.h 的文件。你可以在项目的导航栏中找到它。

桥接头文件创建完之后就可以开始编写Facebook的相关接口代码了。
起首我们创建一个名为FacebookManager的头文件和 OC文件。
FacebookManager.h相关代码如下:
  1. #import <UIKit/UIKit.h>
  2. #import <Foundation/Foundation.h>
  3. #import <AuthenticationServices/AuthenticationServices.h>
  4. #import <SafariServices/SafariServices.h>
  5. #import <FBSDKCoreKit/FBSDKCoreKit-Swift.h>
  6. #import <FBSDKLoginKit/FBSDKLoginKit-Swift.h>
  7. #import <FBSDKShareKit/FBSDKShareKit-Swift.h>
  8. #include <FBSDKCoreKit/FBSDKAuthenticationToken.h>
  9. #include <FBSDKCoreKit/FBSDKAccessToken.h>
  10. /**
  11. * @class FacebookManager
  12. * @brief 一个管理 Facebook 登录、用户信息、分享和应用事件的视图控制器类。
  13. *
  14. * FacebookManager 类提供了处理各种与 Facebook 相关功能的方法,
  15. * 包括登录、检查登录状态、获取用户信息、分享内容和记录应用事件。
  16. * 该类实现了 FBSDKSharingDelegate 协议来处理分享结果。
  17. */
  18. @interface FacebookManager : UIViewController <FBSDKSharingDelegate>
  19. -(void)login;    //该方法触发 Facebook 登录流程,允许用户登录他们的 Facebook 账户.
  20. -(BOOL)checkLogin;    //该方法验证用户的登录状态,并返回一个布尔值指示用户是否已登录。
  21. -(BOOL)checkInstall;    //该方法确定用户设备上是否安装了 Facebook 应用。
  22. -(void)getUserInfo;    //该方法从用户的 Facebook 账户中获取并处理用户的个人资料信息。
  23. -(void)getAppFriendInfo;    //该方法获取使用该应用的朋友列表,并处理他们的信息。
  24. -(void)logout;    //fb登出
  25. -(void)shareFb:(NSString *)jsonStr;    //在Facebook 上分享指定内容。
  26. -(void)checkMessanger:(NSString *)jsonStr;    //该方法验证是否安装了 Facebook Messenger 应用
  27. -(void)inviteMessanger:(NSString *)jsonStr;    //通过 Facebook Messenger 向指定接收者发送邀请
  28. -(void)appEventLogger:(NSString *)eventType;    //使用指定的事件类型记录应用事件。
  29. @end
复制代码
FacebookManager类相关代码如下:
导入相关头文件
  1. #import "FacebookManager.h"
  2. #import <AuthenticationServices/AuthenticationServices.h>
  3. #import <SafariServices/SafariServices.h>
  4. #import <FBSDKCoreKit/FBSDKCoreKit-Swift.h>
  5. #import <FBSDKLoginKit/FBSDKLoginKit-Swift.h>
  6. #import <FBSDKShareKit/FBSDKShareKit-Swift.h>
  7. #include <FBSDKCoreKit/FBSDKAuthenticationToken.h>
  8. #include <FBSDKCoreKit/FBSDKAccessToken.h>
  9. #include <FBSDKCoreKit/FBSDKGraphRequest.h>
  10. #include <FBSDKCoreKit/FBSDKAppEvents.h>
复制代码
实现相关接口:
  1. @implementation FacebookManager
  2. //fb登录接口以及处理登录相关回调
  3. - (void)login {
  4.     NSLog(@"oc Facebook login");
  5.     FBSDKLoginManager *loginManager = [[FBSDKLoginManager alloc] init];
  6.     [loginManager logInWithPermissions:@[@"public_profile", @"email", @"user_friends"]
  7.                      fromViewController:self
  8.                                 handler:^(FBSDKLoginManagerLoginResult *result, NSError *error) {
  9.         if (error) {
  10.             NSLog(@"Facebook login error: %@", error.localizedDescription);
  11.             //登录发生错误
  12.         } else if (result.isCancelled) {
  13.             NSLog(@"Facebook login cancelled");
  14.             //用户取消操作
  15.         } else {
  16.             // 登录成功,可以进行进一步的操作
  17.             NSLog(@"Facebook login success");
  18.             //在此处与JS层交互,传回FB登录成功的消息
  19.         }
  20.     }];
  21. }
复制代码
  1. // 检查是否已登录
  2. - (BOOL)checkLogin {
  3.     FBSDKAccessToken *accessToken = [FBSDKAccessToken currentAccessToken];
  4.     NSLog(@"fbtest: accessToken: %@", accessToken);
  5.     BOOL isLoggedIn = accessToken != nil && ![accessToken isExpired];
  6.     NSLog(@"fbtest: checkLogin: %d", isLoggedIn);
  7.     return isLoggedIn;
  8. }
复制代码
  1. //检测用户手机是否有安装Facebook应用
  2. - (BOOL)checkInstall {
  3.     NSURL *facebookURL = [NSURL URLWithString:@"fb://"];
  4.     if ([[UIApplication sharedApplication] canOpenURL:facebookURL]) {
  5.         return YES;
  6.     } else {
  7.         return NO;
  8.     }
  9. }
复制代码
  1. //获取用户信息(id(类似于微信小游戏的openid), name, email, picture.type(large)(这个是头像的信息))
  2. - (void)getUserInfo {
  3.     NSLog(@"fbtest: getUserInfo");
  4.     FBSDKAccessToken *accessToken = [FBSDKAccessToken currentAccessToken];
  5.     NSLog(@"fbtest: getUserId: %@", accessToken.userID);
  6.    
  7.     if (accessToken == nil || [accessToken isExpired]) {
  8.         NSLog(@"Error: Access token is null or expired.");
  9.         return;
  10.     }
  11.    
  12.     // 创建 Graph API 请求
  13.     FBSDKGraphRequest *request = [[FBSDKGraphRequest alloc] initWithGraphPath:@"me"
  14.                                                                    parameters:@{@"fields": @"id, name, email, picture.type(large)"}
  15.                                                                   tokenString:accessToken.tokenString
  16.                                                                       version:nil
  17.                                                                    HTTPMethod:@"GET"];
  18.    
  19.     [request startWithCompletion:^(id<FBSDKGraphRequestConnecting> connection, id result, NSError *error) {
  20.         if (!error) {
  21.             NSLog(@"fbtest: onCompleted: %@", result);
  22.             
  23.             NSError *jsonError = nil;
  24.             //将result转成jsonData
  25.             NSData *jsonData = [NSJSONSerialization dataWithJSONObject:result options:NSJSONWritingPrettyPrinted error:&jsonError];
  26.             if (!jsonError) {
  27.                 //将jsonData转成JSON字符串
  28.                 NSString *ret = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
  29.                 NSLog(@"fbtest: getUserInfo ret: %@", ret);
  30.                
  31.                 // 在此处将用户信息返回给 JSB
  32.                 //ret.id就是用户id
  33.                 //ret.name就是用户名
  34.                 //ret.picture.data.url就是用户的FB头像url
  35.             } else {
  36.                 NSLog(@"fbtest: getUserInfo JSON error: %@", jsonError);
  37.             }
  38.         } else {
  39.             NSLog(@"fbtest: getUserInfo error: %@", error);
  40.         }
  41.     }];
  42. }
复制代码
  1. //获取用户的好友信息
  2. - (void)getAppFriendInfo {
  3.     NSLog(@"fbtest: getAppFriendInfo");
  4.     FBSDKAccessToken *accessToken = [FBSDKAccessToken currentAccessToken];
  5.     NSLog(@"fbtest: getUserId: %@", accessToken.userID);
  6.     NSLog(@"fbtest: Permissions: %@", accessToken.permissions);
  7.    
  8.     if (accessToken == nil || [accessToken isExpired]) {
  9.         NSLog(@"Error: Access token is null or expired.");
  10.         // 处理访问令牌为空或过期的情况
  11.         return;
  12.     }
  13.    
  14.     // 创建 Graph API 请求
  15.     FBSDKGraphRequest *request = [[FBSDKGraphRequest alloc] initWithGraphPath:@"me/friends"
  16.                                                                    parameters:@{@"fields": @"id, name, picture.type(large)"}
  17.                                                                   tokenString:accessToken.tokenString
  18.                                                                       version:nil
  19.                                                                    HTTPMethod:@"GET"];
  20.    
  21.     [request startWithCompletion:^(id<FBSDKGraphRequestConnecting> connection, id result, NSError *error) {
  22.         if (!error) {
  23.             NSLog(@"fbtest: onCompleted: %@", result);
  24.             
  25.             NSError *jsonError = nil;
  26.             NSData *jsonData = [NSJSONSerialization dataWithJSONObject:result options:NSJSONWritingPrettyPrinted error:&jsonError];
  27.             if (!jsonError) {
  28.                 NSString *ret = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
  29.                 NSLog(@"fbtest: getAppFriendInfo ret: %@", ret);
  30.                
  31.                 // 在此处将好友信息返回给 JSB
  32.             } else {
  33.                 NSLog(@"fbtest: getAppFriendInfo JSON error: %@", jsonError);
  34.             }
  35.         } else {
  36.             NSLog(@"fbtest: getAppFriendInfo error: %@", error);
  37.         }
  38.     }];
  39. }
复制代码
  1. //fb登出
  2. - (void)logout {
  3.     NSLog(@"fbtest: logout");
  4.    
  5.     // 实例化 FBSDKLoginManager 并调用 logOut 方法
  6.     FBSDKLoginManager *loginManager = [[FBSDKLoginManager alloc] init];
  7.     [loginManager logOut];
  8.    
  9.     // 通知 JavaScript 端
  10. }
复制代码
  1. //fb分享
  2. - (void)shareFb:(NSString *)jsonStr {
  3.     NSLog(@"fbtest share: %@", jsonStr);
  4.     NSError *jsonError = nil;
  5.     //将json字符串转成JSON
  6.     id json = [NSJSONSerialization JSONObjectWithData:[jsonStr dataUsingEncoding:NSUTF8StringEncoding] options:NSJSONReadingMutableContainers error:&jsonError];
  7.    
  8.     if (jsonError) {
  9.         NSLog(@"fbtest: JSON parsing error: %@", jsonError);
  10.         // Dispatch error event
  11.         return;
  12.     }
  13.    
  14.     int shareType = [json[@"shareType"] intValue];
  15.     NSString *url = json[@"shareUrl"];
  16.    
  17.     NSLog(@"fbtest share1: %d", shareType);
  18.     NSLog(@"fbtest share2: %@", url);
  19.    
  20.     if (shareType == 0) {
  21.         FBSDKShareLinkContent*linkContent = [[FBSDKShareLinkContent alloc]init];
  22.         linkContent.contentURL= [NSURL URLWithString:url];
  23.             
  24.         FBSDKShareDialog *shareDialog = [[FBSDKShareDialog alloc] initWithViewController:self content:linkContent delegate:self];
  25.         shareDialog.mode = FBSDKShareDialogModeNative;
  26.         if (![shareDialog canShow]) {
  27.             shareDialog.mode = FBSDKShareDialogModeWeb;
  28.         }
  29.         shareDialog.shareContent = linkContent;
  30.         [shareDialog show];
  31.         NSLog(@"fbtest: shareUrl ShareLinkContent");
  32.     } else {
  33.         // Dispatch unsupported share type event
  34.     }
  35. }
复制代码
  1. //检测messenger
  2. - (void)checkMessanger:(NSString *)jsonStr {
  3.     NSLog(@"fbtest checkMessanger: %@", jsonStr);
  4.     NSError *jsonError = nil;
  5.     NSData *jsonData = [jsonStr dataUsingEncoding:NSUTF8StringEncoding];
  6.     if (!jsonData) {
  7.         NSLog(@"fbtest: Error creating JSON data from string");
  8.         return;
  9.     }
  10.     id json = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableContainers error:&jsonError];
  11.     if (jsonError) {
  12.         NSLog(@"fbtest: JSON parsing error: %@", jsonError);
  13.         return;
  14.     }
  15.    
  16.     int shareType = [json[@"shareType"] intValue];
  17.     NSString *url = json[@"shareUrl"];
  18.    
  19.     NSLog(@"fbtest checkMessanger1: %d", shareType);
  20.     NSLog(@"fbtest checkMessanger2: %@", url);
  21.    
  22.     if (shareType == 0) {
  23.         FBSDKShareLinkContent *linkContent = [[FBSDKShareLinkContent alloc] init];
  24.         linkContent.contentURL = [NSURL URLWithString:url];
  25.         FBSDKMessageDialog *messageDialog = [[FBSDKMessageDialog alloc] initWithContent:linkContent delegate:self];
  26.         messageDialog.shareContent = linkContent;
  27.         if ([messageDialog canShow]) {
  28.             NSLog(@"fbtest: checkMessenger ShareLinkContent");
  29.         } else {
  30.             NSLog(@"fbtest: checkMessenger failed!");
  31.         }
  32.     } else {
  33.         // Dispatch unsupported share type event
  34.     }
  35. }
复制代码
  1. //邀请
  2. - (void)inviteMessanger:(NSString *)jsonStr {
  3.     NSLog(@"fbtest invite: %@", jsonStr);
  4.     NSError *jsonError = nil;
  5.     id json = [NSJSONSerialization JSONObjectWithData:[jsonStr dataUsingEncoding:NSUTF8StringEncoding] options:NSJSONReadingMutableContainers error:&jsonError];
  6.    
  7.     if (jsonError) {
  8.         NSLog(@"fbtest: JSON parsing error: %@", jsonError);
  9.         // Dispatch error event
  10.         return;
  11.     }
  12.    
  13.     int shareType = [json[@"shareType"] intValue];
  14.     NSString *url = json[@"shareUrl"];
  15.    
  16.     NSLog(@"fbtest invite1: %d", shareType);
  17.     NSLog(@"fbtest invite2: %@", url);
  18.    
  19.     if (shareType == 0) {
  20.         FBSDKShareLinkContent *linkContent = [[FBSDKShareLinkContent alloc] init];
  21.         linkContent.contentURL = [NSURL URLWithString:url];
  22.         
  23.         [FBSDKMessageDialog showWithContent:linkContent delegate:self];
  24.         NSLog(@"fbtest: invite ShareLinkContent");
  25.     } else {
  26.         // Dispatch unsupported share type event
  27.     }
  28. }
复制代码
  1. //事件上报
  2. - (void)appEventLogger:(NSString *)eventType {
  3.     NSLog(@"fbtest appEventLogger: %@", eventType);
  4.    
  5.     if ([eventType isEqualToString:@"register"]) {
  6.         // 简单上报注册
  7.         [FBSDKAppEvents.shared logEvent:FBSDKAppEventNameCompletedRegistration];
  8.     } else if ([eventType isEqualToString:@"purchased"]) {
  9.         // 上报带有属性和参数的数据
  10. //        NSDictionary *params = @{
  11. //            FBSDKAppEventParameterNameCurrency: @"USD",
  12. //            FBSDKAppEventParameterNameContentType: @"product",
  13. //            FBSDKAppEventParameterNameContent: @"[{"id": "1234", "quantity": 2}, {"id": "5678", "quantity": 1}]"
  14. //        };
  15. //        [FBSDKAppEvents logEvent:FBSDKAppEventNamePurchased valueToSum:54.23 parameters:params];
  16.         
  17.         // 简单上报支付
  18.         [FBSDKAppEvents.shared logEvent:FBSDKAppEventNamePurchased];
  19.     }
  20.    
  21.     // Dispatch event to script
  22.     // Replace the following line with your method to dispatch the event to your script.
  23. }
复制代码
最后是分享和邀请的监听
  1. #pragma mark - FBSDKSharingDelegate
  2. - (void)sharer:(id<FBSDKSharing>)sharer didCompleteWithResults:(NSDictionary *)results {
  3.     if ([sharer isKindOfClass:[FBSDKShareDialog class]]) {
  4.         NSLog(@"fbtest: share onSuccess");
  5.         // Dispatch share success event
  6.     } else if ([sharer isKindOfClass:[FBSDKMessageDialog class]]) {
  7.         NSLog(@"fbtest: invite onSuccess");
  8.         // Dispatch invite success event
  9.     }
  10. }
  11. - (void)sharer:(id<FBSDKSharing>)sharer didFailWithError:(NSError *)error {
  12.     if ([sharer isKindOfClass:[FBSDKShareDialog class]]) {
  13.         NSLog(@"fbtest: share onError %@", error);
  14.         // Dispatch share error event
  15.     } else if ([sharer isKindOfClass:[FBSDKMessageDialog class]]) {
  16.         NSLog(@"fbtest: invite onError %@", error);
  17.         // Dispatch invite error event
  18.     }
  19. }
  20. - (void)sharerDidCancel:(id<FBSDKSharing>)sharer {
  21.     if ([sharer isKindOfClass:[FBSDKShareDialog class]]) {
  22.         NSLog(@"fbtest: share onCancel");
  23.         // Dispatch share cancel event
  24.     } else if ([sharer isKindOfClass:[FBSDKMessageDialog class]]) {
  25.         NSLog(@"fbtest: invite onCancel");
  26.         // Dispatch invite cancel event
  27.     }
  28. }
  29. @end
复制代码
至此就全部完成啦。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

风雨同行

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表