私はFacebookベースのプロバイダを使用してFirebase-UIを使ってログインしています。トークンを取得する方法を知りたいと思います。私はどんな成功もせずにどこでも検索し、ジャバスクリプトレスポンスしか見つけず、javaではありませんでした。これはコードです:Android:ログイン後にfirebase Auth 9.6.1を使用してFacebookにトークンを取得するにはどうすればよいですか?
public class MainActivity extends AppCompatActivity {
private Toolbar toolbar;
private TabLayout tabLayout;
private ViewPager viewPager;
private int[] tabIcons = {
R.drawable.ic_rrr,
R.drawable.compass,
R.drawable.bell,
R.drawable.cloud,
R.drawable.user_circle,
};
SharedPreferences preferences;
private Firebase myFirebaseRef = new Firebase("https://xxxxxxxxx/");
private FirebaseAuth auth;
private FirebaseUser firebaseUser;
private FirebaseAuth.AuthStateListener mAuthListener;
private User user;
private static final int RC_SIGN_IN = 100;
private static final int FLOCKIN_PROVIDER = 1;
private static final int FACEBOOK_PROVIDER = 2;
Geocoder geocoder;
String bestProvider;
double lat;
double lng;
List<Address> usr = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
auth = FirebaseAuth.getInstance();
// Get the shared preferences
preferences = getSharedPreferences("my_preferences", MODE_PRIVATE);
Boolean user_saw_presentation = preferences.getBoolean("onboarding_complete", false);
// Check if onboarding_complete is false
if (!user_saw_presentation) {
// Start the onboarding Activity
Intent intro = new Intent(this, intro.class);
startActivity(intro);
finish();
return;
}
/*firebaseUser= auth.getCurrentUser();
if (firebaseUser != null) {
// already signed in
getUserDataFromProvider(firebaseUser);
} else {
// not signed in
sendUserToAuthenticationScreen();
}*/
toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(false);
getSupportActionBar().setDisplayShowTitleEnabled(true);
//getSupportActionBar().setLogo(R.mipmap.ic_launcher_toolbar);
//getSupportActionBar().setDisplayUseLogoEnabled(true);
viewPager = (ViewPager) findViewById(R.id.viewpager);
setupViewPager(viewPager);
tabLayout = (TabLayout) findViewById(R.id.tabs);
tabLayout.setupWithViewPager(viewPager);
tabLayout.setTabGravity(TabLayout.GRAVITY_FILL);
setupTabIcons();
mAuthListener = new FirebaseAuth.AuthStateListener() {
@Override
public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
FirebaseUser user = firebaseAuth.getCurrentUser();
if (user != null) {
// User is signed in
Log.d("Loggin state", "onAuthStateChanged:signed_in:" + user.getUid());
getUserDataFromProvider(user);
} else {
// User is signed out
Log.d("Loggin state", "onAuthStateChanged:signed_out");
sendUserToAuthenticationScreen();
}
}
};
}
@Override
protected void onPostResume() {
super.onPostResume();
//just in case it doesn't work the disabling of the back button
//TODO:descomentar esto una vez que termine de probar
/* if (!preferences.getBoolean("logged_in", false)) {
sendUserToLogin();
}*/
}
/*protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == RC_SIGN_IN) {
if (resultCode == RESULT_OK) {
// user is signed in!
Log.i("USER_AUTHENTICATION","LOGGED_IN");
startActivity(new Intent(this, MainActivity.class));
finish();
} else {
// user is not signed in. Maybe just wait for the user to press
// "sign in" again, or show a message
Log.i("USER_AUTHENTICATION","LOGIN_FAILED");
sendUserToAuthenticationScreen();
}
}
}*/
//it gets the user data from Firebase
private void getUserDataFromProvider(FirebaseUser firebaseUser){
user=new User(
firebaseUser.getUid(),
firebaseUser.getDisplayName(),
firebaseUser.getEmail(),
firebaseUser.getPhotoUrl()
);
List<? extends UserInfo> providers=firebaseUser.getProviderData();
//which type of user,if thesecondelement comes
String provider= providers.get(1).getProviderId();
if(provider.equals("facebook.com")){
user.setProvider(FACEBOOK_PROVIDER);
}else if(provider.equals("password")){
user.setProvider(FLOCKIN_PROVIDER);
}
}
private void sendUserToAuthenticationScreen() {
startActivityForResult(
AuthUI.getInstance().createSignInIntentBuilder().setProviders(
AuthUI.EMAIL_PROVIDER,
AuthUI.FACEBOOK_PROVIDER)
//.setTheme(R.style.SuperAppTheme)
.build(),
RC_SIGN_IN);
}
private void setupTabIcons() {
tabLayout.getTabAt(0).setIcon(tabIcons[0]);
tabLayout.getTabAt(1).setIcon(tabIcons[1]);
tabLayout.getTabAt(2).setIcon(tabIcons[2]);
tabLayout.getTabAt(3).setIcon(tabIcons[3]);
tabLayout.getTabAt(4).setIcon(tabIcons[4]);
tabLayout.getTabAt(0).getIcon().setColorFilter(Color.WHITE, PorterDuff.Mode.SRC_IN);
tabLayout.getTabAt(1).getIcon().setColorFilter(Color.parseColor("#1976D2"), PorterDuff.Mode.SRC_IN);
tabLayout.getTabAt(2).getIcon().setColorFilter(Color.parseColor("#1976D2"), PorterDuff.Mode.SRC_IN);
tabLayout.getTabAt(3).getIcon().setColorFilter(Color.parseColor("#1976D2"), PorterDuff.Mode.SRC_IN);
tabLayout.getTabAt(4).getIcon().setColorFilter(Color.parseColor("#1976D2"), PorterDuff.Mode.SRC_IN);
tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
@Override
public void onTabSelected(TabLayout.Tab tab) {
tab.getIcon().setColorFilter(Color.WHITE, PorterDuff.Mode.SRC_IN);
}
@Override
public void onTabUnselected(TabLayout.Tab tab) {
tab.getIcon().setColorFilter(Color.parseColor("#1976D2"), PorterDuff.Mode.SRC_IN);
}
@Override
public void onTabReselected(TabLayout.Tab tab) {
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_home, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
switch (id) {
case R.id.logout:
//logout logic
}
return true;
}
private void setupViewPager(ViewPager viewPager) {
ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());
adapter.addFragment(new MainMyFloks(), "Floks");
adapter.addFragment(new MainNearby(), "Explore");
adapter.addFragment(new MainAlerts(), "Alerts");
adapter.addFragment(new MainArchive(), "Archive");
adapter.addFragment(new MainProfile(), "Profile");
viewPager.setAdapter(adapter);
viewPager.setOffscreenPageLimit(5);
}
class ViewPagerAdapter extends FragmentPagerAdapter {
private final List<Fragment> mFragmentList = new ArrayList<>();
private final List<String> mFragmentTitleList = new ArrayList<>();
public ViewPagerAdapter(FragmentManager manager) {
super(manager);
}
@Override
public Fragment getItem(int position) {
return mFragmentList.get(position);
}
@Override
public int getCount() {
return mFragmentList.size();
}
public void addFragment(Fragment fragment, String title) {
mFragmentList.add(fragment);
mFragmentTitleList.add(title);
}
@Override
public CharSequence getPageTitle(int position) {
//return mFragmentTitleList.get(position);
return null;
}
}
@Override
public void onStart() {
super.onStart();
auth.addAuthStateListener(mAuthListener);
}
@Override
public void onStop() {
super.onStop();
if (mAuthListener != null) {
auth.removeAuthStateListener(mAuthListener);
}
}
}
そして、私はこの方法で情報を記録し、ログインした後、私のアプリに正しくなっている:
private void getUserDataFromProvider(FirebaseUser firebaseUser){
user=new User(
firebaseUser.getUid(),
firebaseUser.getDisplayName(),
firebaseUser.getEmail(),
firebaseUser.getPhotoUrl()
);
Log.i("FIREBASE_ID",user.getFirebaseId());
List<? extends UserInfo> providers=firebaseUser.getProviderData();
//which type of user,if thesecondelement comes
String provider= providers.get(1).getProviderId();
if(provider.equals("facebook.com")){
user.setProvider(FACEBOOK_PROVIDER);
}else if(provider.equals("password")){
user.setProvider(FLOCKIN_PROVIDER);
}
}
任意のアイデア?。ありがとうございます
:)ありがとうコーディング
ハッピー初期利用graphAPI後、驚異を働きました。 AndroidManifest XMLにインテントフィルタを追加することは言及していませんでした。トークンをデータベースに保存するのか、それとも共有の環境設定に保存するのですか?.....これがファイヤーベースのトークンか、私たちが話しているfacebookトークンなのですか? FCMセクション.....フェイスブックトークンを返すことは一度も言及していません – Juan
あなたは間違いをしたと思います。これはFCMのトークンです...私はちょうどfirebaseからのfacebookのアクセストークンを取得したいと思います.... – Juan
私はあなたがFCMトークンを意味すると思ったことをお詫び申し上げます。私はそれを試していないが、これは(https://github.com/firebase/FirebaseUI-Android/blob/9fb5779c6037567228becdc24bc82466296b4eb0/auth/src/main/java/com/firebase/ui/auth/provider/FacebookProvider。 java)はFirebaseの例で、チェックアウトしたいかもしれません。 – MohanadMohie