IOSアクセスフェイスブック詳細


フェースブックアクセス
1.フェースブックのバックグラウンドにiosプラットフォームを配置し、fbアプリを取得する。

store idはとりあえず既存のものを探して記入してもいいです。
2.CocoaPodsはいくつかのコアライブラリを導入する

pod 'FBSDKCoreKit', '~> 9.0.1'
pod 'FBSDKLoginKit', '~> 9.0.1'
pod 'FBSDKShareKit', '~> 9.0.1'
podプロジェクトは、静的ライブラリを構築し、/Users/XXX/Library/Developer/Xcode/DerivedData/Build/Productsに対応する真機/シミュレータのディレクトリになくしました。しかし、プロジェクトがコンパイルされたときは、静的ライブラリにリンクすることができます。

3.info.plistファイルの<dict>...</dict>内にプロファイルを追加する

<key>CFBundleURLTypes</key>
<array> 
<dict> <key>CFBundleURLSchemes</key> <array> <string>fb[APP_ID]</string> </array> </dict>
</array> 

<key>FacebookAppID</key>
<string>[APP_ID]</string>

<key>FacebookDisplayName</key>
<string>[APP_NAME]</string>

<key>LSApplicationQueriesSchemes</key>
<array> <string>fbapi</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-share-api</string> <string>fbauth2</string> <string>fbshareextension</string>
</array>
[APP_]ID)置換fb apid.
[APP_]NAME]をap名に置き換える。
4.コード
アプリ起動後にsdkを初期化する

// AppDelegate.m  
@implementation AppDelegate

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

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url options:(nonnull NSDictionary<UIApplicationOpenURLOptionsKey, id> *)options{
  [[FBSDKApplicationDelegate sharedInstance] application:application openURL:url options:options];
  return YES;
}
iOS 13はウェブサイトを開く機能をSceene Delegateに移動しました。

// SceneDelegate.m
#import <FBSDKCoreKit/FBSDKCoreKit.h>

@import FacebookCore;

@implementation SceneDelegate

- (void)scene:(UIScene *)scene openURLContexts:(NSSet<UIOpenURLContext *> *)URLContexts{
  UIOpenURLContext *context = URLContexts.allObjects.firstObject;
  [FBSDKApplicationDelegate.sharedInstance application:UIApplication.sharedApplication
                                               openURL:context.URL
                                     sourceApplication:context.options.sourceApplication
                                            annotation:context.options.annotation];
}
ログイン

#import "FBHelper.h"

#import <FBSDKCoreKit/FBSDKCoreKit.h>
#import <FBSDKLoginKit/FBSDKLoginKit.h>

@implementation FBHelper

static FBHelper *_sharedIns = nil;
+(instancetype) shareInstance {
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        _sharedIns = [[self alloc] init] ;
    }) ;
    
    return _sharedIns ;
}

-(void)showLoginBtn:(UIView*)view{
    FBSDKLoginButton *loginButton = [[FBSDKLoginButton alloc] init];
    loginButton.center = view.center;
    [view addSubview:loginButton];
}

-(void)login:(UIViewController*)vc{
    FBSDKLoginManager *login = [[FBSDKLoginManager alloc] init];
    [login logInWithPermissions:@[@"publish_actions"]
             fromViewController:vc
                        handler:^(FBSDKLoginManagerLoginResult *result, NSError *error) {
        if (error) {
            NSLog(@"--- login fail, err: %@", error);
            return;
        }
        
        FBSDKAccessToken* accessToken = [FBSDKAccessToken currentAccessToken];
        if (accessToken) {
            NSLog(@"--- login success, userId: %@, token: %@", accessToken.userID, accessToken.tokenString);
            return;
        }
        
        NSLog(@"--- login cancel");
    }];
}

-(void)logout{
    if ([FBSDKAccessToken currentAccessToken]) {
        NSLog(@"--- has accessToken");
        FBSDKLoginManager *login = [[FBSDKLoginManager alloc] init];
        [login logOut];
    } else {
        NSLog(@"--- no accessToken");
    }
}

-(void)getUserData{
    if ([FBSDKAccessToken currentAccessToken]) {
        if ([FBSDKAccessToken currentAccessToken]) {
            [[[FBSDKGraphRequest alloc] initWithGraphPath:@"me?fields=id,name,token_for_business" parameters:nil]
             startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) {
                if (!error) {
                    NSLog(@"--- fetched success, result: %@", result);
                } else {
                    NSLog(@"--- fetched error: %@", error);
                }
            }];
        }
    } else {
        NSLog(@"--- no accessToken");
    }
}

@end
穴を踏む
コンパイルエラー:swift関連ファイルが見つかりませんでした。
エラー:Undefined symbol: __swift_FORCE_LOAD_$_sdkはswiftを使っていますが、工程構成にはswiftヘッダファイルの検索経路が設定されていません。
解決方法は簡単です。swiftファイルを作成すればいいです。xcodeはブリッジファイルCreate Bridging Headerの作成を提示します。
以上がIOSアクセスフェースブックの詳細です。IOSアクセスフェースブックに関する資料は他の関連記事に注目してください。