2016-11-12 54 views
0

我试图在Android应用程序中实施firebase-ui-auth:1.0.0。我开始从github下载并安装FirebaseUI-Android演示(https://github.com/firebase/FirebaseUI-Android)。我已经使用此演示应用程序使用所有四种方法(电子邮件,Google,Facebook和Twitter)成功创建了Firebase用户。Firebase身份验证:1.0.0不适用于Facebook和Twitter

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

我已经在Facebook和Twitter上设置了我的应用程序。将他们的App ID和应用程序秘密都插入我的应用程序的Firebase控制台,并将Firebase回调URL插入到Facebook和Twitter控制台中。我还在Android控制台中插入了Android Key Hash。

在此先感谢有关如何获得Facebook和Twitter身份验证工作的任何想法,非常感谢。

我的应用程序的的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()我初始化火力地堡验证用下面的代码:

// 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; 
} 
} 

回答

0

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

应用/的build.gradle

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

谢谢,杰弗里的建议。不幸的是,maven {url'https://maven.fabric.io/public'}已经在我的仓库中。 – Loren

+0

将它放在应用程序的构建中。 Android括号内的gradle。 –