【问题标题】:Firebase auth:1.0.0 Not Working for Facebook and TwitterFirebase auth:1.0.0 不适用于 Facebook 和 Twitter
【发布时间】:2017-03-26 17:42:16
【问题描述】:

我正在尝试在我的 Android 应用中实现 firebase-ui-auth:1.0.0。我首先从 github (https://github.com/firebase/FirebaseUI-Android) 下载并安装 FirebaseUI-Android 演示。我已经使用这个演示应用程序使用所有四种方法(电子邮件、谷歌、Facebook 和 Twitter)成功地创建了 Firebase 用户。

现在我正在尝试在我的 Android 应用中实现 firebase-ui-auth。电子邮件和谷歌方法工作正常; Facebook 和 Twitter 方法失败。单击“使用 Facebook 登录”时,我会短暂看到进度条,然后返回登录页面,但没有解释登录失败的原因。单击“使用 Twitter 登录”时,Twitter 页面“授权 myApp 使用您的帐户?”出现;单击“允许”后,我返回登录页面并显示 Toast 说明“无法完成操作”

我已经在 Facebook 和 Twitter 中设置了我的应用程序。将他们的 App ID 和 App Secret 插入我的 App 的 Firebase 控制台,并在 Facebook 和 Twitter 控制台中插入 Firebase 回调 URL。我还在 Facebook 控制台中插入了我的 Android 密钥哈希。

非常感谢您对如何让 Facebook 和 Twitter 身份验证正常工作的任何想法。

我的app的build.gradle如下:

apply plugin: 'com.android.application'

android {
compileSdkVersion 25
buildToolsVersion "25.0.0"
defaultConfig {
    applicationId "com.lbconsulting.coachslog"
    minSdkVersion 16
    targetSdkVersion 25
    versionCode 1
    versionName "1.0"
    testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
}
}

dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
    exclude group: 'com.android.support', module: 'support-annotations'
})
compile 'com.android.support:appcompat-v7:25.0.0'
compile 'com.android.support:design:25.0.0'
testCompile 'junit:junit:4.12'

// Google
compile 'com.google.android.gms:play-services-auth:9.8.0'
// Firebase
compile 'com.google.firebase:firebase-database:9.8.0'
compile 'com.google.firebase:firebase-auth:9.8.0'
compile 'com.google.firebase:firebase-config:9.8.0'
compile 'com.google.android.gms:play-services-appinvite:9.8.0'
compile 'com.google.firebase:firebase-messaging:9.8.0'
compile 'com.google.android.gms:play-services-ads:9.8.0'
compile 'com.google.firebase:firebase-crash:9.8.0'
compile 'com.google.firebase:firebase-invites:9.8.0'

// Firebase UI
//    compile 'com.firebaseui:firebase-ui-database:0.4.0'

// FirebaseUI Database only
compile 'com.firebaseui:firebase-ui-database:1.0.0'

// FirebaseUI Auth only
compile 'com.firebaseui:firebase-ui-auth:1.0.0'

// FirebaseUI Storage only
//    compile 'com.firebaseui:firebase-ui-storage:1.0.0'

// Timber and Butterknife
compile 'com.jakewharton.timber:timber:4.1.0'
compile 'com.jakewharton:butterknife:8.0.1'

// Event Bus
compile 'org.greenrobot:eventbus:3.0.0'
// Gson
compile 'com.google.code.gson:gson:2.6.2'
compile 'com.google.android.gms:play-services-appindexing:9.8.0'
compile 'com.android.support:recyclerview-v7:25.0.0'

// Facebook
compile 'com.facebook.android:facebook-android-sdk:[4,5)'

compile 'org.jetbrains:annotations-java5:15.0'
}
apply plugin: 'com.google.gms.google-services'

在我的应用程序的 onCreate() 中,我使用以下代码初始化 Firebase 身份验证:

// Initialize Firebase Auth
     mFirebaseAuth = FirebaseAuth.getInstance();
    if (mFirebaseAuth.getCurrentUser() == null) {
        startActivity(AuthUiActivity.createIntent(AthletesActivity.this));
        finish();
        return;
    } else {

我的 AuthUiActivity 代码是:

public class AuthUiActivity extends AppCompatActivity {
private static final String FIREBASE_TOS_URL =
        "https://www.firebase.com/terms/terms-of-service.html";

private static final int RC_SIGN_IN = 100;

@BindView(android.R.id.content)
View mRootView;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Timber.i("onCreate()");

    FirebaseAuth auth = FirebaseAuth.getInstance();
    if (auth.getCurrentUser() != null) {
        startActivity(AthletesActivity.createIntent(this));
        finish();
    }
    ButterKnife.bind(this);

    startActivityForResult(
            AuthUI.getInstance().createSignInIntentBuilder()
                    .setTheme(AuthUI.getDefaultTheme())
                    .setLogo(AuthUI.NO_LOGO)
                    .setProviders(getSelectedProviders())
                    .setTosUrl(getSelectedTosUrl())
                    .setIsSmartLockEnabled(true)
                    .build(),
            RC_SIGN_IN);
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    Timber.i("onActivityResult()");
    if (requestCode == RC_SIGN_IN) {
        handleSignInResponse(resultCode, data);
        return;
    }
    showSnackbar(R.string.unknown_response);
}

@MainThread
private void handleSignInResponse(int resultCode, Intent data) {
    if (resultCode == RESULT_OK) {
        startActivity(AthletesActivity.createIntent(this));
        finish();
        return;
    }

    if (resultCode == RESULT_CANCELED) {
        showSnackbar(R.string.sign_in_cancelled);
        return;
    }

    if (resultCode == ResultCodes.RESULT_NO_NETWORK) {
        showSnackbar(R.string.no_internet_connection);
        return;
    }

    showSnackbar(R.string.unknown_sign_in_response);
}

@MainThread
private List<IdpConfig> getSelectedProviders() {
    List<IdpConfig> selectedProviders = new ArrayList<>();

    selectedProviders.add(new IdpConfig.Builder(AuthUI.EMAIL_PROVIDER).build());

    selectedProviders.add(
            new IdpConfig.Builder(AuthUI.FACEBOOK_PROVIDER)
                    .setPermissions(getFacebookPermissions())
                    .build());

    selectedProviders.add(
            new IdpConfig.Builder(AuthUI.GOOGLE_PROVIDER)
                    .setPermissions(getGooglePermissions())
                    .build());

    selectedProviders.add(new IdpConfig.Builder(AuthUI.TWITTER_PROVIDER).build());

    return selectedProviders;
}

@MainThread
private List<String> getFacebookPermissions() {
    List<String> result = new ArrayList<>();
    // TODO: do we need to get Facebook user_friends and user_photos
//        result.add("user_friends");
//        result.add("user_photos");
    return result;
}

@MainThread
private List<String> getGooglePermissions() {
    List<String> result = new ArrayList<>();
    // TODO: do we need to get Google Games and Drive_file?
//        result.add(Scopes.GAMES);
//        result.add(Scopes.DRIVE_FILE);
    return result;
}

@MainThread
private String getSelectedTosUrl() {
//        if (mUseGoogleTos.isChecked()) {
//            return GOOGLE_TOS_URL;
//        }
// TODO: create terms of service and save it in Firebase
    return FIREBASE_TOS_URL;
}

@MainThread
private void showSnackbar(@StringRes int errorMessageRes) {
    if (mRootView != null) {
        Snackbar.make(mRootView, errorMessageRes, Snackbar.LENGTH_LONG).show();
    }
}

public static Intent createIntent(Context context) {
    Intent intent = new Intent();
    intent.setClass(context, AuthUiActivity.class);
    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
    return intent;
}
}

【问题讨论】:

    标签: android facebook twitter firebase firebase-authentication


    【解决方案1】:

    将以下存储库添加到您的 gradle:

    app/build.gradle

    android {
      repositories {
        maven { url 'https://maven.fabric.io/public' }
      }
    ...
    

    【讨论】:

    • 感谢杰弗里的建议。不幸的是,maven { url 'maven.fabric.io/public' } 已经在我的存储库中了。
    • 将它放在应用程序的构建中。 gradle 在 Android 括号内。
    猜你喜欢
    • 2021-06-27
    • 1970-01-01
    • 2019-11-16
    • 2017-06-06
    • 2018-10-19
    • 1970-01-01
    • 2022-01-19
    • 1970-01-01
    • 2020-04-23
    相关资源
    最近更新 更多