サーバー構築不要!スマートフォンアプリ向けの新クラウド

トップ >ドキュメント >SDKガイド(iOS):SNS連携

SDKガイド(iOS)

ドキュメント内検索

SNS連携

このドキュメントは更新されていません。
こちらから最新版をご覧ください。

SNS連携について

ニフティクラウド mobile backendでは、Facebook、Twitter、GoogleとのSNS連携機能を用意しています。
これらの機能をSDKで利用するには、ダッシュボードでSNS連携を有効にする必要があります。
詳しくはダッシュボードの使い方をご覧ください。

Facebook認証を利用する

ニフティクラウド mobile backendのiOS SDK v2.1.0から、
Facebook iOS SDKのversion4に対応するためにインターフェースを変更しています。

iOS SDK v2.1.0より以前にFacebook認証機能を利用されていた方も、
以下の内容を参考にメソッドの呼び出し方法などを変更してください。

Facebook SDKのインストール

CocoaPodsを利用してSDKをインストールした場合は、Podfileを編集してFacebookSDKを追加してください。

#Facebook SDK v4.x required iOS 7.0 or higher
platform :ios,'7.0'

target "YOUR_APP_TARGET" do
    pod 'FBSDKCoreKit', '~> 4.1.0'
    pod 'FBSDKLoginKit', '~> 4.1.0'
    pod 'NCMB', :git => 'https://github.com/NIFTYCloud-mbaas/ncmb_ios.git'
end

framework形式でSDKをインストールした場合は、
以下の手順でSDKの再アーカイブを行い、作成されたNCMB.frameworkを利用する必要があります。

  • ニフティクラウド mobile backendのSDKをgit cloneしてダウンロードする
git clone https://github.com/NIFTYCloud-mbaas/ncmb_ios

  • git clone で作成されたディレクトリのNCMBTests/NCMB.xcworkspaceをXcodeで開く
  • 開発者向けサイトから最新のFacebook SDKをダウンロード
  • Facebook SDKをインストールし、FBSDKCoreKit.framewrok、FBSDKLoginKit.frameworkをNCMB.xcworkspaceに追加
  • プロジェクトの設定を開き、targetをNCMB.frameworkにする
  • Build PhasesのRun Scriptを開く
  • xcodebuildコマンドで指定しているSDKのバージョンを自分のXcodeに合わせて変更
# Xcode6.3を使用している場合は8.3を指定する
-sdk iphonesimulator8.3 \

# 変更箇所が2つあるので注意してください
-sdk iphoneos8.3 \

  • TargetをNCMB.frameworkkにしたスキーマを追加
  • メニューバーのProduct / Archiveを実行
  • NCMBTests/build/Release-framework/NCMBディレクトリにあるNCMB.frameworkをアプリのプロジェクトに追加
  • アプリのプロジェクトにFBSDKCoreKit.framework、FBSDKLoginKit.frameworkを追加

Facebook連携を利用しない時に、以下の設定がされているとSDKが正常に動作しないことがあります。

  • Other Linker Flagsに「-all_load」や「-ObjC」が設定されている
Facebookアプリの登録

Facebookの開発者サイトにあるGetting Started, Facebook iOS SDKを参考に
FacebookSDKを使ったアプリを登録していきます。
主な設定項目は以下の通りです。

  • プラットフォームでiOSを選択
  • Bundle IDの登録
  • iPhone Store ID/iPad Store IDの登録(公開済みアプリの場合)
  • Single Sign Onを有効にする
  • 設定を保存
Xcodeの設定

引き続きGetting Started, Facebook iOS SDKを参考に
Xcodeの設定を行います。
必要な設定は以下の通りです。

  • plistの編集
    • FacebookAppIDにFacebookへの登録を行ったアプリのIDを設定
    • FacebookDisplayNameにアプリ名(登録したFacebookアプリのダッシュボードに表示されているもの)を設定
    • URLSchemeにFacebookAppIDの先頭にfbをつけた文字列を設定
Facebook認証の実装

まずはじめに、アプリケーションのデリゲートに処理を追記していきます。
各メソッドを追加するデリゲートメソッドを間違えないように注意してください。

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

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

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

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

Facebookの認証情報でニフティクラウド mobile backendの会員登録を行う場合は
logInWithReadPermission:block: / logInWithPublishingPermission:block:を利用します。
アプリの利用者に許可してもらう権限によって、ReadPermission / PublishingPermissionを使い分けます。

会員登録時には、Facebookの認証情報を取得するためにFacebookアプリかブラウザ版のFacebookに遷移します。
アプリ利用者が処理をキャンセルすることができるため、
NCMBErrorFacebookLoginCancelledのハンドリングを行ってください。

[NCMBFacebookUtils logInWithReadPermission:@[@"email"] block:^(NCMBUser *user, NSError *error){
    if (error){
        if (error.code == NCMBErrorFacebookLoginCancelled){
            //Facebookのログインがキャンセルされた場合
        } else {
            //その他のエラーが発生した場合
        }
    } else {
        //会員登録後の処理
    }
}];

すでに別の方法でユーザー登録を行っている場合でも、
Facebook認証情報をリンクさせることができます。

[NCMBFacebookUtils linkUser:user withReadPermission:@[@"email"] block:^(NCMBUser *user, NSError *error){
    if (error){
        if (error.code == NCMBErrorFacebookLoginCancelled){
            //Facebookのログインがキャンセルされた場合
        } else {
            //その他のエラーが発生した場合
        }
    } else {
        //会員情報更新後の処理
    }
}];

iOS6でFacebook認証を利用する場合

iOS6のサポートを行いたい場合には、
Facebook SDKのv3.xを利用する必要があります。
その場合は、FacebookSDK.frameworkをプロジェクトに組み込んでください。

また、アプリケーションのデリゲートも、以下のように書き換えてください。

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

- (void)applicationDidBecomeActive:(UIApplication *)application {
  //v3.xを利用する場合はコメントアウト
  //[FBSDKAppEvents activateApp];
}

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

  //v3.xを利用する場合に追加
  return YES;

  //v3.xを利用する場合はコメントアウト
  /*
  return [[FBSDKApplicationDelegate sharedInstance] application:application
                                  didFinishLaunchingWithOptions:launchOptions];
  */
}

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

  //v3.xを利用する場合に追加
  return [FBAppCall handleOpenURL:url sourceApplication:sourceApplication];

  //v3.xを利用する場合はコメントアウト
  /*
  return [[FBSDKApplicationDelegate sharedInstance] application:application
                                                        openURL:url
                                              sourceApplication:sourceApplication
                                                     annotation:annotation];
  */
}

Twitter認証を実装する

はじめに、Twitterの開発者向けサイトで取得した

Consumer KeyとConsumer Secretをセットして初期化を行います。

// application:didFinishLaunchingWithOptions:で初期化
[NCMBTwitterUtils initializeWithConsumerKey:@"YOUR CONSUMER KEY" consumerSecret:@"YOUR CONSUMER SECRET"];

Twitterアカウントを利用してログイン処理を実装する場合は、

以下のようにlogInWithBlockメソッドを利用します。

(同期処理のタイプなど、他のログイン用メソッドもいくつかあります。)

[NCMBTwitterUtils logInWithBlock:^(NCMBUser *user, NSError *error) {
    if (!user) {
        NSLog(@"Twitterログインがキャンセルされた.");
        return;
    } else if (user.isNew) {
        NSLog(@"Twitterで登録成功");
    } else {
        NSLog(@"Twitterでログイン成功!");
    }
}];

すでに別の方法でユーザー登録を行っている場合でも、

Twitter認証情報をリンクさせることができます。

if (![NCMBTwitterUtils isLinkedWithUser:user]) {
    [NCMBTwitterUtils linkUser:user block:^(NSError *error) {
        if ([NCMBTwitterUtils isLinkedWithUser:user]) {
            NSLog(@"Twitterアカウントのリンク完了");
        }
    }];
}

Google認証を利用する

Google認証の制限事項は以下のとおりになります。

  • 動作環境はiOS7.0以上が対象
  • framework形式ではなくCocoaPods形式のみの提供
Google Sign-In SDKのインストール

Podfileに「pod 'Google/SignIn'」を追記してください。

#Google Sign-In SDK required iOS 7.0 or higher
platform :ios,'7.0'

target "YOUR_APP_TARGET" do
    pod 'Google/SignIn'
    pod 'NCMB', :git => 'https://github.com/NIFTYCloud-mbaas/ncmb_ios.git'
end

Googleアプリの登録

Googleの開発者サイトにあるStart integratingを参考に
Google Sign-In SDKを使ったアプリを登録していきます。

主な手順は以下の通りです。

  • Get a Configuration Fileボタンをクリック
  • AppName欄に登録するアプリを選択または新規アプリ名を入力
  • iOS Bundle Id欄に登録するアプリのBundle Identifierを入力
  • Google Sign-In をEnableに変更
  • GoogleService-Info.plistをダウンロード
Xcodeの設定

引き続きStart integratingを参考にXcodeの設定を行います。

主な手順は以下の通りです。

  • アプリ登録時に取得したGoogleService-Info.plistファイルをXcodeプロジェクトに追加
  • URL Typesを二つ追加
    • 一つ目はURL Schemes に GoogleService-Info.plist内REVERSED_CLIENT_IDの値を入力
    • 二つ目はURL Schemes にアプリのBundle Identifierを入力
Google認証の実装

Delegateメソッドに以下のコードを追記します。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    [NCMB setApplicationKey:@"YOUR_APPLICATION_KEY" clientKey:@"YOUR_CLIENT_KEY"];
    NSError* configureError;
    [[GGLContext sharedInstance] configureWithError: &configureError];
    if (configureError != nil) {
        NSLog(@"設定エラー: %@", configureError);
    }

    //...その他処理

    return YES;
}

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

Googleアカウントを利用してユーザー登録を行う場合は、
以下のようにlogInWithGoogleAccountWithBlockメソッドを利用します。

[NCMBGoogleUtils logInWithGoogleAccountWithBlock:^(NCMBUser *user, NSError *error) {
    if(error == nil){
        NSLog(@"Googleで登録成功");
    }else{
        NSLog(@"Googleで登録失敗:%@",error);
    }
}];

すでに別の方法でユーザー登録を行っている場合でも、
Google認証情報をリンクさせることができます。

[NCMBGoogleUtils linkUser:user googleAccountWithblock:^(NCMBUser *user, NSError *error){
    if (error){
        NSLog(@"Googleアカウントのリンク完了");
    } else {
        NSLog(@"Googleアカウントのリンク失敗:%@",error);
    }
}];

アプリ内でWebViewを開いて認証を行いたい場合

iOS SDKの内部にて、デフォルトではSafariに遷移して認証を行うように設定しています。
WebViewをアプリ内で開いて認証を行いたい場合は、
Googleのドキュメントにある「Add the sign-in button」の章の3番まで実施して
認証部分をアプリ側で実装したうえで、以下の処理を追加してください。

  • viewDidAppearにてWebViewでの認証を有効にする
- (void)viewDidAppear:(BOOL)animated{
    [super viewDidAppear:animated];

    [GIDSignIn sharedInstance].uiDelegate = self;

    //WebViewでの認証を有効にする
    [GIDSignIn sharedInstance].allowsSignInWithWebView = YES;
}

  • 認証後に呼び出されるデリゲートメソッドにて、NCMBUserのsignUpWithGoogleTokenを実行する
- (void)signIn:(GIDSignIn *)signIn
    didSignInForUser:(GIDGoogleUser *)user
     withError:(NSError *)error
{
    //mBaaSへの会員登録を行うためにNCMBUserクラスのインスタンスを作成
    NCMBUser *mbUser = [NCMBUser user];

    //認証済みのGIDGoogleUserからuserIDとaccessTokenを取得してmBaaSへの会員登録を行う
    [mbUser signUpWithGoogleToken:@{@"id":user.userID,
                                    @"access_token":[user.authentication accessToken]}
                            block:^(NSError *error) {
                                if(error == nil){
                                    NSLog(@"Googleで登録成功");
                                }else{
                                    NSLog(@"Googleで登録失敗:%@",error);
                                }
                            }];
}

iOS 9対応について

Facebook連携でのiOS 9対応
  • Facebook開発者サイトでアナウンスされている、iOS 9対応を実施してください
  • ニフティクラウド mobile backendでは、Facebook SDKのv4.1.0で動作確認を行っております
Twitter連携でのiOS 9対応
  • App Tranceport Securityの影響でTiwtterのapiサーバーとの通信が制限されます
    • Info.plistでapiサーバーとの通信を有効にしてください
<key>NSAppTransportSecurity</key>
<dict>
    <key>NSExceptionDomains</key>
    <dict>
        <key>api.twitter.com</key>
        <dict>
            <key>NSIncludesSubdomains</key>
            <true/>
            <key>NSExceptionRequiresForwardSecrecy</key>
            <false/>
        </dict>
    </dict>
</dict>

Google連携でのiOS 9対応
  • Google Sing-in iOS SDKのv2.2.0から、iOS 9に対応しています

お探しの内容が見つからなかった場合はユーザーコミュニティ もご活用ください。(回答保証はいたしかねます)
なお、 Expertプラン以上のお客様はテクニカルサポートにてご質問を承らせて頂きます。

推奨画面サイズ1024×768px以上

ページの先頭へ