我的启动活动中的Facebook登录按钮正在关闭启动活动而不进行下一个活动。通过logcat的外观,甚至没有调用onSuccess方法。无论如何要让它去下一个活动?
public class SplashActivity extends Activity {
private Intent intent;
private Handler mHandler;
private Runnable mNextRunnable;
private final long SPLASH_TIME = 3000;
private VideoView videoHolder;
private LoginButton loginButton;
private CallbackManager callbackManager;
private AccessTokenTracker accessTokenTracker;
private ImageView iv;
private static final String TAG = SplashActivity.class.getSimpleName();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
FacebookSdk.sdkInitialize(getApplicationContext());
setContentView(R.layout.activity_splash);
// try {
// PackageInfo info = getPackageManager().getPackageInfo(
// "info.nexrave.nexrave",
// PackageManager.GET_SIGNATURES);
// for (Signature signature : info.signatures) {
// MessageDigest md = MessageDigest.getInstance("SHA");
// md.update(signature.toByteArray());
// Log.d("KeyHash:", Base64.encodeToString(md.digest(), Base64.DEFAULT));
// }
// } catch (Exception e) {
//
// }
Log.d(TAG, "Video about to be called");
//Video settings
videoHolder = (VideoView) findViewById(R.id.videoView);
Uri video = Uri.parse("android.resource://" + getPackageName() + "/"
+ R.raw.video_footage);
videoHolder.setVideoURI(video);
videoHolder.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
mp.setLooping(true);
}
});
videoHolder.start();
//Facebook settings
iv = (ImageView) findViewById(R.id.iv_splash_logo);
loginButton = (LoginButton) findViewById(R.id.login_button);
// Callback registration
callbackManager = CallbackManager.Factory.create();
loginButton.setReadPermissions("public_profile", "email", "user_friends");
Log.d(TAG, "UpdateWithToken Called: registering callback");
loginButton.registerCallback(callbackManager, mCallBack);
// AppEventsLogger.activateApp(this);
Log.d(TAG, "UpdateWithToken About To Be Called");
// accessTokenTracker = new AccessTokenTracker() {
// @Override
// protected void onCurrentAccessTokenChanged(AccessToken oldAccessToken, AccessToken newAccessToken) {
// updateWithToken(newAccessToken);
// }
// };
updateWithToken(AccessToken.getCurrentAccessToken());
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
callbackManager.onActivityResult(requestCode, resultCode, data);
}
@Override
protected void onPause() {
super.onPause();
finish();
}
private void makeVisible() {
iv.setVisibility(View.VISIBLE);
iv.bringToFront();
loginButton.setVisibility(View.VISIBLE);
loginButton.bringToFront();
}
private void updateWithToken(AccessToken currentAccessToken) {
Log.d(TAG, "UpdateWithToken Called");
if (currentAccessToken != null) {
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
Log.d(TAG, "UpdateWithToken Called: User logged in");
Intent i = new Intent(SplashActivity.this, FeedActivity.class);
startActivity(i);
}
}, SPLASH_TIME);
} else {
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
Log.d(TAG, "UpdateWithToken Called: Not logged in");
makeVisible();
Log.d(TAG, "UpdateWithToken Called: finished");
}
}, SPLASH_TIME);
}
}
private FacebookCallback<LoginResult> mCallBack = new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResult) {
// App code
Log.d(TAG, "UpdateWithToken Called: Done");
//Placeholder: Need to check firebase to see if already registered
intent = new Intent(SplashActivity.this, EnterPhoneNumber.class);
startActivity(intent);
}
@Override
public void onCancel() {
// App code
Log.d(TAG, "UpdateWithToken Called: cancel");
}
@Override
public void onError(FacebookException exception) {
// App code
Log.d(TAG, "UpdateWithToken Called: error");
}
};
}
答案 0 :(得分:0)
我发现了一些事情......
声明
Profile profile;
private ProfileTracker mProfileTracker;
在你的onCreate()
中 FacebookSdk.sdkInitialize(getApplicationContext());
callbackManager = CallbackManager.Factory.create();
updateWithToken(AccessToken.getCurrentAccessToken());
accessTokenTracker = new AccessTokenTracker() {
@Override
protected void onCurrentAccessTokenChanged(AccessToken oldToken, AccessToken newToken) {
updateWithToken(newToken);
}
};
accessTokenTracker.startTracking();
loginButton = (LoginButton) findViewById(R.id.login_button);
loginButton.setReadPermissions(Arrays.asList(
"public_profile", "email", "user_friends"));
loginButton.registerCallback(callbackManager, callback);
你的updateWithToken()方法中的
private void updateWithToken(AccessToken currentAccessToken) {
if (currentAccessToken != null) {
//User logged In--do your stuff
} else {
//user not logged in
}
}
同样在你的回调方法中
private FacebookCallback<LoginResult> callback = new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResult) {
try {
if (Profile.getCurrentProfile() == null) {
mProfileTracker = new ProfileTracker() {
@Override
protected void onCurrentProfileChanged(Profile profile_old, Profile profile_new) {
// profile2 is the new profile
profile = profile_new;
Log.v("facebook - profile", profile_new.getFirstName());
mProfileTracker.stopTracking();
}
};
mProfileTracker.startTracking();
} else {
profile = Profile.getCurrentProfile();
Log.v("facebook - profile", profile.getFirstName());
}
Intent intent = new Intent(getApplicationContext(), EnterPhoneNumber.class);
startActivity(intent);
} catch (Exception e) {
Log.d("ERROR", e.toString());
}
}
@Override
public void onCancel() {
}
@Override
public void onError(FacebookException e) {
Log.d("FACEBOOK ERRROR", e.toString());
}
};
同时在开发人员面板中正确添加Key Hash
在清单上添加:
<activity
android:name="com.facebook.FacebookActivity"
android:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation"
android:label="@string/app_name"
android:theme="@android:style/Theme.Translucent.NoTitleBar" />
<meta-data
android:name="com.facebook.sdk.ApplicationId"
android:value="@string/APP_ID" />
同样在你的布局中:
<com.facebook.login.widget.LoginButton xmlns:fb="http://schemas.android.com/apk/res-auto"
android:id="@+id/login_button"
android:layout_width="match_parent"
android:layout_height="50dp"
android:layout_centerHorizontal="true"
android:layout_marginBottom="10dp"
android:layout_marginLeft="@dimen/activity_left_margin"
android:layout_marginRight="@dimen/activity_right_margin"
android:background="@drawable/custom_facebook"
android:drawableLeft="@drawable/fb"
android:drawablePadding="15dp"
android:gravity="center"
android:padding="10dp"
android:singleLine="true"
android:text="Login with Facebook"
android:textColor="@color/color_white"
android:textSize="18sp"
android:visibility="visible" />