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

トップ >ドキュメント >SNS連携(Obj-C):Twitter連携

SNS連携(Obj-C)

Twitter連携

概要

  • このページでは、Twitterアカウントを利用した会員登録や、既存アカウントにTwitter認証情報を紐付ける設定について説明していきます。

事前準備

  • mobile backendの会員情報にTwitterアカウントを利用する場合は、以下の準備が必要です。
  • mobile backendを利用するための準備(SDK導入など)方法の詳細はこちらをご覧ください。
  • Twitterアプリを作成して、上記のFirebaseとcallbackUrlの連携を行ってくださいFirebase設定の参考

アプリをFirebaseとmobile backendに連携

アプリを持たない方はXcodeでアプリを作成してください。
※ 既存のアプリを用いる方はこちらの作業は不要です。

  • Xcodeで新規なアプリを作成します。

  • その後、アプリをmobile backend連携とFirebaseの連携を以下の通り進めてください。
mobile backendのSDKを導入
  • ncmb_iosを導入します。こちら を参考ください。
  • 今回では cocoapods の導入方法を説明します。
    Podfileが既に作成されている方はこちらの作業は不要です。
$ cd TwitterSigninSample 
$ pod init

  • プロジェクトのディレクトリ内に作成されたPodfileを開いて、以下の内容に書き換えてください
# Uncomment the next line to define a global platform for your project
# platform :ios, '9.0'

target 'TwitterSigninSample' do
  # Comment the next line if you don't want to use dynamic frameworks
  use_frameworks!

  # Pods for TwitterSigninSample
  pod 'NCMB', :git => 'https://github.com/NIFCLOUD-mbaas/ncmb_ios.git'

end

  • 次のコマンドを実行します。
$ pod install

アプリをFirebaseに連携
  • Firebaseの管理画面で連携したいアプリを選択、iOSというアイコンでクリックして連携を行います
    ※アプリをお持ちでない方は新規アプリを作成してください。

  • 「iOS bundle ID」を入力したら、「Register app」ボタンをクリックします。

  • 「GoogleService-Info.plist」ファイルをダウンロードしたら、「Next」ボタンを押してください。

  • 設定情報を追加し、また「Next」ボタンを押します。
    ※注意: Podfile'Firebase/Auth'を追加してください。

  • Podfileの内容は以下となります。

# Uncomment the next line to define a global platform for your project
# platform :ios, '9.0'

target 'TwitterSigninSample' do
  # Comment the next line if you don't want to use dynamic frameworks
  use_frameworks!

  # Pods for TwitterSigninSample
  pod 'NCMB', :git => 'https://github.com/NIFCLOUD-mbaas/ncmb_ios.git'
  pod 'Firebase/Auth'

end

  • 次のコマンドを実行します。
pod install

  • その後、Firebaseの管理画面へ戻して、Nextボタンで次の作業を進めます。

  • プロジェクトのディレクトリ内に作成されたTwitterSigninSample.xcworkspaceを開き、 AppDelegate.mファイルを以下の内容を初期化します。
#import "AppDelegate.h"
#import <NCMB/NCMB.h>
@import Firebase;

@interface AppDelegate ()

@end

@implementation AppDelegate


- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // Override point for customization after application launch.
    [FIRApp configure];
    [NCMB setApplicationKey:@"YOUR_APPLICATION_KEY" clientKey:@"YOUR_CLIENT_KEY"];
    return YES;
}

  • 「Continue to console」をクリックして連携作業を完了します。

アプリ側でTwitter認証を実装する

会員登録・認証を行う

Twitterでログインしてmobile backendの会員情報で会員を作成します。

また、TWITTER_KEYとTWITTER_SECRETはあらかじめアクティビティに設定します。

  • TWITTER_KEYはTwitterアプリのAPI key
  • TWITTER_SECRETはTwitterアプリのAPI secret key

twitterProvider値を初期します。

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    self.twitterProvider = [FIROAuthProvider providerWithProviderID:@"twitter.com"];
}

Twitterでログインして、mobile backendの会員情報で会員を新規作成します。

[self.twitterProvider getCredentialWithUIDelegate:nil
                               completion:^(FIRAuthCredential *_Nullable credential, NSError *_Nullable error) {
      if (error) {
       // Handle error.
          NSLog(@"Error %@", error);
      }
      if (credential) {
        [[FIRAuth auth] signInWithCredential:credential
                                  completion:^(FIRAuthDataResult *_Nullable authResult, NSError *_Nullable error) {
            if (error) {
                // Handle error.
                NSLog(@"Error %@", error);
            }
            FIRAdditionalUserInfo *userInfo = authResult.additionalUserInfo;
            FIROAuthCredential *credential2 = authResult.credential;
            NSString *oAuthToken = credential2.accessToken;
            NSString *serect = credential2.secret;
            NSString *userName =userInfo.profile[@"screen_name"];
            NSString *userId = userInfo.profile[@"id_str"];
            NSLog(@"authResult %@", userName);

            NSDictionary *twitterInfo = @{@"oauth_consumer_key": @"TWITTER_KEY",
            @"consumer_secret": @"TWITTER_SECRET",
            @"id": userId,
            @"oauth_token": oAuthToken,
            @"oauth_token_secret": serect,
            @"screen_name": userName};

            NCMBUser *user = [NCMBUser user];
            [user signUpWithTwitterToken:twitterInfo withBlock:^(NSError *error) {
                if (error){
                    NSLog(@"Error %@", error);
                } else {
                    //会員登録に成功した場合の処理
                    NSLog(@"twitterInfo %@", twitterInfo);
                }
            }];
        }];
      }
    }];

ViewController.mファイルの完璧コードは以下の通りです。

#import "ViewController.h"
#import <NCMB/NCMB.h>
@import Firebase;

@interface ViewController ()
@property (nonatomic)FIROAuthProvider *twitterProvider;
@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    self.twitterProvider = [FIROAuthProvider providerWithProviderID:@"twitter.com"];
}
- (IBAction)signinWithTwitter:(id)sender {
    [self.twitterProvider getCredentialWithUIDelegate:nil
                                   completion:^(FIRAuthCredential *_Nullable credential, NSError *_Nullable error) {
          if (error) {
           // Handle error.
              NSLog(@"Error %@", error);
          }
          if (credential) {
            [[FIRAuth auth] signInWithCredential:credential
                                      completion:^(FIRAuthDataResult *_Nullable authResult, NSError *_Nullable error) {
                if (error) {
                    // Handle error.
                    NSLog(@"Error %@", error);
                }
                FIRAdditionalUserInfo *userInfo = authResult.additionalUserInfo;
                FIROAuthCredential *credential2 = authResult.credential;
                NSString *oAuthToken = credential2.accessToken;
                NSString *serect = credential2.secret;
                NSString *userName =userInfo.profile[@"screen_name"];
                NSString *userId = userInfo.profile[@"id_str"];
                NSLog(@"authResult %@", userName);

                NSDictionary *twitterInfo = @{@"oauth_consumer_key": @"TWITTER_KEY",
                @"consumer_secret": @"TWITTER_SECRET",
                @"id": userId,
                @"oauth_token": oAuthToken,
                @"oauth_token_secret": serect,
                @"screen_name": userName};

                NCMBUser *user = [NCMBUser user];
                [user signUpWithTwitterToken:twitterInfo withBlock:^(NSError *error) {
                    if (error){
                        NSLog(@"Error %@", error);
                    } else {
                        //会員登録に成功した場合の処理
                        NSLog(@"twitterInfo %@", twitterInfo);
                    }
                }];
            }];
          }
        }];
}

@end

Twitterの会員登録・認証機能のみの利用であれば、これで完了となります。
ログインした会員の操作を行いたい方は、ログイン内のカレントユーザの説明を参照してください。

登録、認証を行う時、エラーが発生する場合、考えられる原因の可能性は以下となります。

  • エラーコード:E403005、 エラーメッセージ:"twitter must not be entered."
    • 管理画面のアプリ設定にあるTwitterの設定にて、「許可する」となっていない可能性があります。設定画面を確認してください。
  • エラーコード:E401003、 エラーメッセージ:"OAuth twitter authentication error."
    • 「Twitter Consumer Key」の情報が不正かもしれません、再度確認んください。
Twitterの認証情報を既存会員に紐付ける

Twitterの認証情報を既存会員に紐付けるには、linkWithTwitterToken:withBlock メソッドを利用します。

[self.twitterProvider getCredentialWithUIDelegate:nil
                               completion:^(FIRAuthCredential *_Nullable credential, NSError *_Nullable error) {
      if (error) {
       // Handle error.
          NSLog(@"Error %@", error);
      }
      if (credential) {
        [[FIRAuth auth] signInWithCredential:credential
                                  completion:^(FIRAuthDataResult *_Nullable authResult, NSError *_Nullable error) {
            if (error) {
                // Handle error.
                NSLog(@"Error %@", error);
            }
            FIRAdditionalUserInfo *userInfo = authResult.additionalUserInfo;
            FIROAuthCredential *credential2 = authResult.credential;
            NSString *oAuthToken = credential2.accessToken;
            NSString *serect = credential2.secret;
            NSString *userName =userInfo.profile[@"screen_name"];
            NSString *userId = userInfo.profile[@"id_str"];
            NSLog(@"authResult %@", userName);

            NSDictionary *twitterInfo = @{@"oauth_consumer_key": @"TWITTER_KEY",
            @"consumer_secret": @"TWITTER_SECRET",
            @"id": userId,
            @"oauth_token": oAuthToken,
            @"oauth_token_secret": serect,
            @"screen_name": userName};

            NCMBUser *mbUser = [NCMBUser currentUser];
            if(!mbUser){
                mbUser = [NCMBUser user];
            }
            [mbUser linkWithTwitterToken:twitterInfo withBlock:^(NSError *error) {
                if (error){
                    //エラーがあった場合の処理
                } else {
                    //認証情報の紐付けが完了したあとの処理
                }
            }];
        }];
      }
    }];

紐付けを行う時、エラーが発生する場合、考えられる原因の可能性は以下となります。

  • エラーコード:409001 エラーメッセージ:"authData is duplication."
    • 連携紐付けしようとするTwitterアカウントはすでに登録されていると思われます。

unlink:withBlock メソッドで、指定した認証情報だけをログイン中の会員情報から削除することができます。

// 認証情報の削除
[mbUser unlink:@"twitter" withBlock:^(NSError *error) {
    if (error){
        //認証情報の削除に失敗した場合の処理
    } else {
        //認証情報の削除後の処理
    }
}];

ログアウトする

ログアウトを行う場合は、mobile backendの会員としてのログアウト処理と、Twitter認証情報の削除が必要です。

// mobile backendのログアウト処理
NCMBUser.logOutInBackground { (error) in
    if (error){
        //エラー処理
    } else {
        // アプリ内のTwitter認証情報を削除する
        //userIdはプロパティで保持するか、currentUserのauthDataから取得
    }
}

アプリをビルドする方法

  • TwitterとFirebaseのログイン流れは以下のとおりです。XcodeプロジェクトのschemesにURLのカスタマイズを追加します。
    • ダウンロードした「GoogleService-Info.plist」ファイルを開き、「REVERSED_CLIENT_ID」のところでStringタグ中の内容をコピーしてください。
    • その後、Xcodeでプロジェクトを開きますし、コピーした内容をURL Schemesの項目に貼ります。

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

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

ページの先頭へ