SNS連携(Android)
Twitter連携
Contents |
概要
このページでは、Twitterアカウントを利用してアプリの認証を行う機能について
必要な設定と実装を説明していきます。
事前準備
mobile backendの会員情報にTwitterアカウントを利用する場合は、以下の準備が必要です。
- mobile backendを利用するための準備(SDK導入など)方法の詳細はこちらをご覧ください。
- Twitterアプリを作成して、上記のFirebaseとcallbackUrlの連携を行ってくださいFirebase設定の参考
Firebaseアプリとmobile backendを連携
アプリを持たない方はAndroidStudioでアプリを作成してください。
※ 既存のアプリを持ちる方はこちらの作業は不要です。
- Android studioで新規なアプリを作成します。
- その後、アプリをmobile backend連携とFirebaseの連携を以下の通り進めてください。
mobile backendのSDKを導入
- ncmb_androidを導入します。こちら を参考ください。
Githubリリースページの NCMB.x.x.x.zip ボタンからダウンロードしてください
- 最新版をダウンロードしてください。
- zipファイルの中身に、NCMB.jarがあります。
このSDKでは、以下のライブラリを使用しています。
- Gson
Android Studioでプロジェクトを開き、以下の手順でSDKをインストールしてください
- app/libsフォルダにNCMB.jarをコピーします
- app/build.gradleファイルに以下を追加します
dependencies {
implementation 'com.google.code.gson:gson:2.3.1'
implementation files('libs/NCMB.jar')
}
- AndroidManifest.xmlの編集
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
アプリをFirebaseに連携
Firebaseの管理画面で連携したいアプリを選択、Androidというアイコンでクリックして連携を行います。
※アプリを持たない方は新規なアプリを作成してください。
こちらの手順では、必ず 「Android package name」 と「Debug signing certificate SHA-1 (optional)」の情報を入力してください。Googleからこれら情報を取得して認証するためです。
※参考:キーを取得する方法は以下のところをご参考ください。
https://developers.google.com/android/guides/client-auth
- 「google-services.json」ファイルをダウンロードしたら、「Next」ボタンを押してください。
以下の通りfirebaseと連携するライブラリを追加します。
- File: TwitterSigninSample/build.gradle
dependencies {
classpath "com.android.tools.build:gradle:7.0.3"
classpath 'com.google.gms:google-services:4.3.10' // <-- add this line
}
- File: TwitterSigninSample/app/build.gradle
plugins {
id 'com.android.application'
id 'com.google.gms.google-services' // <-- add this line
}
...
dependencies {
...
implementation platform('com.google.firebase:firebase-bom:28.4.2') // <-- add this line
implementation 'com.google.code.gson:gson:2.3.1'
implementation files('libs/NCMB.jar')
implementation 'com.google.firebase:firebase-auth' // <-- add this line
}
- その後、Firebaseの管理画面へ戻して、
Next
ボタンで次の作業を進めます。 - 「Continue to console」で連携を完了します
アプリ側でTwitter認証を実装する
会員登録・認証を行う
NCMBTwitterParametersで認証データを作成し、
NCMBUserクラスのloginInBackgroundWithメソッドでログインします。
また、TWITTER_KEYとTWITTER_SECRETはあらかじめアクティビティに設定します。
- TWITTER_KEYはTwitterアプリのAPI key
- TWITTER_SECRETはTwitterアプリのAPI secret key
FirebaseAuth firebaseAuth = FirebaseAuth.getInstance();
OAuthProvider.Builder provider = OAuthProvider.newBuilder("twitter.com");
firebaseAuth
.startActivityForSignInWithProvider(/* activity= */ this, provider.build())
.addOnSuccessListener(
new OnSuccessListener<AuthResult>() {
@Override
public void onSuccess(AuthResult authResult) {
OAuthCredential oAuthCredential = (OAuthCredential)authResult.getCredential();
String tokenid = authResult.getAdditionalUserInfo().getProfile().get("id").toString();
String accessToken = oAuthCredential.getAccessToken();
String serect = oAuthCredential.getSecret();
//認証用パラメータを作成
NCMBTwitterParameters parameters = new NCMBTwitterParameters(
tokenid,
authResult.getAdditionalUserInfo().getUsername(),
TWITTER_KEY,
TWITTER_SECRET,
accessToken,
serect
);
//ニフクラ mobile backendにログイン
NCMBUser.loginInBackgroundWith(parameters, new LoginCallback(){
@Override
public void done(NCMBUser user, NCMBException e) {
if (e != null) {
Log.d("YOUR_TAG", e.getMessage());
} else {
Log.d("YOUR_TAG", user.getObjectId());
}
}
});
}
})
.addOnFailureListener(
new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
// Handler failure.
Log.d("YOUR_TAG", e.getMessage());
}
});
完璧なサンプルコードが以下通りです。
TwitterSigninSample/app/src/main/java/com/nifcloud/mbaas/twittersigninsample/MainActivity.java
ファイルで
package com.nifcloud.mbaas.twittersigninsample;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import com.google.android.gms.tasks.OnFailureListener;
import com.google.android.gms.tasks.OnSuccessListener;
import com.google.firebase.FirebaseApp;
import com.google.firebase.auth.AuthResult;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.OAuthCredential;
import com.google.firebase.auth.OAuthProvider;
import com.nifcloud.mbaas.core.LoginCallback;
import com.nifcloud.mbaas.core.NCMB;
import com.nifcloud.mbaas.core.NCMBException;
import com.nifcloud.mbaas.core.NCMBTwitterParameters;
import com.nifcloud.mbaas.core.NCMBUser;
public class MainActivity extends AppCompatActivity {
String TWITTER_KEY = "API key";
String TWITTER_SECRET = "API secret key";
FirebaseAuth firebaseAuth;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
FirebaseApp.initializeApp(this);
firebaseAuth = FirebaseAuth.getInstance();
NCMB.initialize(getApplicationContext(), "APP_KEY", "CLIENT_KEY");
findViewById(R.id.btn_twitter).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
twitterSignup();
}
});
}
private void twitterSignup() {
OAuthProvider.Builder provider = OAuthProvider.newBuilder("twitter.com");
firebaseAuth
.startActivityForSignInWithProvider(/* activity= */ this, provider.build())
.addOnSuccessListener(
new OnSuccessListener<AuthResult>() {
@Override
public void onSuccess(AuthResult authResult) {
OAuthCredential oAuthCredential = (OAuthCredential) authResult.getCredential();
String tokenid = authResult.getAdditionalUserInfo().getProfile().get("id").toString();
String accessToken = oAuthCredential.getAccessToken();
String serect = oAuthCredential.getSecret();
//認証用パラメータを作成
NCMBTwitterParameters parameters = new NCMBTwitterParameters(
tokenid,
authResult.getAdditionalUserInfo().getUsername(),
TWITTER_KEY,
TWITTER_SECRET,
accessToken,
serect
);
//ニフクラ mobile backendにログイン
NCMBUser.loginInBackgroundWith(parameters, new LoginCallback() {
@Override
public void done(NCMBUser user, NCMBException e) {
if (e != null) {
Log.d("YOUR_TAG", e.getMessage());
} else {
Log.d("YOUR_TAG", user.getObjectId());
}
}
});
}
})
.addOnFailureListener(
new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
// Handler failure.
Log.d("YOUR_TAG", e.getMessage());
}
});
}
}
Twitterの会員登録・認証機能のみの利用であれば、これで完了となります。
ログインした会員の操作を行いたい方は、ログイン内のカレントユーザの説明を参照してください。
登録、認証を行う時、エラーが発生する場合、考えられる原因の可能性は以下となります。
- エラーコード:E403005、 エラーメッセージ:"twitter must not be entered."
- 管理画面のアプリ設定にあるTwitterの設定にて、「許可する」となっていない可能性があります。設定画面を確認してください。
- エラーコード:E401003、 エラーメッセージ:"OAuth twitter authentication error."
- 「Twitter Consumer Key」の情報が不正かもしれません、再度確認んください。
Twitterの認証情報を既存会員に紐付ける
Twitterの認証情報を既存会員に紐付けるには、linkInBackgroundWithメソッドを利用します
FirebaseAuth firebaseAuth = FirebaseAuth.getInstance();
OAuthProvider.Builder provider = OAuthProvider.newBuilder("twitter.com");
firebaseAuth
.startActivityForSignInWithProvider(/* activity= */ this, provider.build())
.addOnSuccessListener(
new OnSuccessListener<AuthResult>() {
@Override
public void onSuccess(AuthResult authResult) {
OAuthCredential oAuthCredential = (OAuthCredential)authResult.getCredential();
String tokenid = authResult.getAdditionalUserInfo().getProfile().get("id").toString();
String accessToken = oAuthCredential.getAccessToken();
String serect = oAuthCredential.getSecret();
//認証用パラメータを作成
NCMBTwitterParameters parameters = new NCMBTwitterParameters(
tokenid,
authResult.getAdditionalUserInfo().getUsername(),
TWITTER_KEY,
TWITTER_SECRET,
accessToken,
serect
);
NCMBUser currentUser = NCMBUser.getCurrentUser();
if (currentUser != null) {
currentUser.linkInBackgroundWith(parameters, new DoneCallback() {
@Override
public void done(NCMBException e) {
if (e != null) {
Log.d("YOUR_TAG", e.getMessage());
} else {
Log.d("YOUR_TAG", "Link With your account is successful!");
}
}
});
} else {
Log.d("YOUR_TAG", "Please sign-in with NCMB account.");
}
}
})
.addOnFailureListener(
new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
// Handler failure.
Log.d("YOUR_TAG", e.getMessage());
}
});
紐付けを行う時、エラーが発生する場合、考えられる原因の可能性は以下となります。
- エラーコード:409001 エラーメッセージ:"authData is duplication."
- 連携紐付けしようとするTwitterアカウントはすでに登録されていると思われます。
unlinkInBackgroundメソッドで、指定した認証情報だけをログイン中の会員情報から削除することができます。
NCMBUser currentUser = NCMBUser.getCurrentUser();
if (currentUser != null) {
currentUser.unlinkInBackground("twitter", new DoneCallback() {
@Override
public void done(NCMBException e) {
if (e != null) {
Log.d("YOUR_TAG", e.getMessage());
} else {
Log.d("YOUR_TAG", "Unlink is successful!");
}
}
});
}
お探しの内容が見つからなかった場合はユーザーコミュニティ
もご活用ください。(回答保証はいたしかねます)
なお、 Expertプラン以上のお客様はテクニカルサポートにてご質問を承らせて頂きます。
推奨画面サイズ1024×768px以上