LoginSignup
5
2

More than 5 years have passed since last update.

【React Native】react-native-fbsdk 導入(ios)

Last updated at Posted at 2018-01-26

やりたいこと

react nativeでfacebookログインを行う。
下記を利用。
https://github.com/facebook/react-native-fbsdk

手順

1.react-native-fbsdkのインストールとリンク

react-native install react-native-fbsdk

2.iOS用Facebook SDKスタートガイド

下記の「iOS用クイックスタート」にしたがって設定ファイルを編集する
https://developers.facebook.com/docs/ios/getting-started/
 -

!!手順以外の修正①!!

*どこに置くかのが最適か不明
sdkの保存場所をプロジェクト内のios配下にframeworksディレクトリ作成して、その中にframeworkを配置
アプリケーションのXcodeプロジェクトを開きます。
プロジェクトに[Frameworks]グループがない場合は作成します。
Finderで~/Documents/FacebookSDKを開きます。
Bolts.framework、FBSDKCoreKit.framework、FBSDKLoginKit.framework、FBSDKShareKit.frameworkファイルをドラッグして、XcodeのProject Navigatorの[Frameworks]グループにドロップします。メッセージが表示されたら、[Copy Items if needed]を選択して続行します。

!!手順以外の修正②!!

アプリのインストールとアプリの開くをトラッキング

手順に従うと、下記のソースをAppDelegate.mに追加する。
しかし、下記のエラーが表示される。
どうやら、「UIApplication」を重複して定義しているのが悪いようです。
そのため、「手順通りの追加ソース」を追加せずに下記の「手順以外の追加ソース」を追加した。

>エラー

Duplicate declaration of method 'application:didFinishLaunchingWithOptions:'

>手順通りの追加ソース

- (void)applicationDidBecomeActive:(UIApplication *)application {
  [FBSDKAppEvents activateApp];
}

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

- (BOOL)application:(UIApplication *)application
            openURL:(NSURL *)url
  sourceApplication:(NSString *)sourceApplication
         annotation:(id)annotation {
  return [[FBSDKApplicationDelegate sharedInstance] application:application
                                                         openURL:url
                                               sourceApplication:sourceApplication
                                                      annotation:annotation];
}

>手順以外の追加ソース

- (BOOL)application:(UIApplication *)application
            openURL:(NSURL *)url
  sourceApplication:(NSString *)sourceApplication
         annotation:(id)annotation {
  return [[FBSDKApplicationDelegate sharedInstance] application:application
                                                        openURL:url
                                              sourceApplication:sourceApplication
                                                     annotation:annotation];
}

- (void)applicationDidBecomeActive:(UIApplication *)application {
  [FBSDKAppEvents activateApp];
}

!!手順以外の修正③!!

統合を試そう

手順では「アプリのViewController.mファイルのいずれかに、以下を追加します」とあるが、
ViewController.mファイルがない。
そのため、ViewController.mをxcodeから作成した。
作成したViewController.mに手順通りに必要なソースを追加する。
スクリーンショット 2018-01-26 21.23.50.png
スクリーンショット 2018-01-26 21.24.13.png

使用方法

js側でインポート方法を下記で行う。
*好みなので、手順通りに行って問題ない。

import React, { Component } from 'react';
import Modal from 'react-native-modalbox';
import { View } from 'react-native';
import FBSDK, { LoginButton, AccessToken } from 'react-native-fbsdk';

export default class Login extends Component {
  render() {
    return (
      <View>
        <LoginButton
          publishPermissions={["publish_actions"]}
          onLoginFinished={
            (error, result) => {
              if (error) {
                alert("login has error: " + result.error);
              } else if (result.isCancelled) {
                alert("login is cancelled.");
              } else {
                AccessToken.getCurrentAccessToken().then(
                  (data) => {
                    alert(data.accessToken.toString())
                  }
                )
              }
            }
          }
          onLogoutFinished={() => alert("logout.")}/>
      </View>
    );
  }
}

5
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
2