Android Facebook 登录 "LoginActivity could not be started"
Android Facebook Login "LoginActivity could not be started"
我已经为我的 Android 应用程序安装并配置了 link Facebook SDK 的所有内容。
- Facebook SDK 在我的项目中
- 我在Facebook APP ID中添加了我的APP ID
- 我的 Android 密钥哈希是正确的并且 link 在 Facebook 开发板上编辑
- 我的清单中有 Activity“com.facebook.FacebookActivity”
- 我的清单中有 Activity“com.facebook.LoginActivity”
- 我在我的清单中设置了元数据 facebook_app_id 并且更正了
Facebook小工具登录设置
<com.facebook.login.widget.LoginButton
android:id="@+id/login_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginTop="30dp"
android:layout_marginBottom="30dp" />
我的片段Class
public class FragmentSetting extends android.support.v4.app.Fragment {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
FacebookSdk.sdkInitialize(getActivity().getApplicationContext());
SingletonUserData.setCallbackManager(CallbackManager.Factory.create());
}
@Override
public View onCreateView(LayoutInflater inflater,ViewGroup container, Bundle args) {
if (!SingletonUserData.isLogged()) {
view = inflater.inflate(R.layout.fragment_logme, container, false);
TextView facebook = (TextView) view.findViewById(R.id.LogByFacebook);
loginButton = (LoginButton) view.findViewById(R.id.login_button);
loginButton.setReadPermissions(Arrays.asList("public_profile", "user_friends", "email"));
loginButton.setFragment(this);
loginButton.registerCallback(SingletonUserData.getCallbackManager(), new FacebookCallback<LoginResult>() {...});
和
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
SingletonUserData.getCallbackManager().onActivityResult(requestCode, resultCode, data);
}
几个小时后,我找不到错误。
是因为片段吗?我在我的 MainActivityToFragment 中尝试过,但我总是有相同的回溯,即:
Log in attempt failed: LoginActivity could not be started
at com.facebook.login.LoginManager.startLogin(LoginManager.java:382)
at com.facebook.login.LoginManager.logInWithReadPermissions(LoginManager.java:250)
at com.facebook.login.widget.LoginButton$LoginClickListener.onClick(LoginButton.java:689)
at com.facebook.FacebookButtonBase.onClick(FacebookButtonBase.java:310)
我可以通过从 AndroidManifest.xml
中删除 LoginActivity 来解决这个问题
<!--Remove this-->
<activity android:name="com.facebook.LoginActivity"
android:theme="@android:style/Theme.Translucent.NoTitleBar"
android:label="@string/app_name" />
并添加
<!--Add this-->
<activity android:name="com.facebook.FacebookActivity"
android:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation"
android:theme="@android:style/Theme.Translucent.NoTitleBar"
android:label="@string/app_name" />
所以我遇到了同样的问题并通过...在 Facebook developers page 上正确设置我的应用程序来解决它。
基本上我的应用程序丢失了:
- (Google播放)包名
- class姓名
- 一个密钥散列
一旦我填写这些,错误就消失了。
正在开发的应用程序和 facebook 的 Hash Key a/c 会要求两者的 hash key 必须相同。
public void getHashkey(){
try {
PackageInfo packageInfo = getPackageManager().getPackageInfo(getPackageName(),
PackageManager.GET_SIGNATURES);
for (Signature signature : packageInfo.signatures) {
MessageDigest md = MessageDigest.getInstance("SHA");
md.update(signature.toByteArray());
Log.d("KeyHash:", Base64.encodeToString(md.digest(), Base64.DEFAULT));
}
} catch (PackageManager.NameNotFoundException e1) {
Log.e("Name not found", e1.toString());
} catch (NoSuchAlgorithmException e) {
Log.e("No such an algorithm", e.toString());
} catch (Exception e) {
Log.e("Exception", e.toString());
}
}
在 Activity 的 onCreate() 中调用它并从日志中复制散列键(以 = 符号结尾)并注册到 facebook a/c 然后你就完成了。
我已经为我的 Android 应用程序安装并配置了 link Facebook SDK 的所有内容。
- Facebook SDK 在我的项目中
- 我在Facebook APP ID中添加了我的APP ID
- 我的 Android 密钥哈希是正确的并且 link 在 Facebook 开发板上编辑
- 我的清单中有 Activity“com.facebook.FacebookActivity”
- 我的清单中有 Activity“com.facebook.LoginActivity”
- 我在我的清单中设置了元数据 facebook_app_id 并且更正了
Facebook小工具登录设置
<com.facebook.login.widget.LoginButton
android:id="@+id/login_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginTop="30dp"
android:layout_marginBottom="30dp" />
我的片段Class
public class FragmentSetting extends android.support.v4.app.Fragment {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
FacebookSdk.sdkInitialize(getActivity().getApplicationContext());
SingletonUserData.setCallbackManager(CallbackManager.Factory.create());
}
@Override
public View onCreateView(LayoutInflater inflater,ViewGroup container, Bundle args) {
if (!SingletonUserData.isLogged()) {
view = inflater.inflate(R.layout.fragment_logme, container, false);
TextView facebook = (TextView) view.findViewById(R.id.LogByFacebook);
loginButton = (LoginButton) view.findViewById(R.id.login_button);
loginButton.setReadPermissions(Arrays.asList("public_profile", "user_friends", "email"));
loginButton.setFragment(this);
loginButton.registerCallback(SingletonUserData.getCallbackManager(), new FacebookCallback<LoginResult>() {...});
和
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
SingletonUserData.getCallbackManager().onActivityResult(requestCode, resultCode, data);
}
几个小时后,我找不到错误。 是因为片段吗?我在我的 MainActivityToFragment 中尝试过,但我总是有相同的回溯,即:
Log in attempt failed: LoginActivity could not be started at com.facebook.login.LoginManager.startLogin(LoginManager.java:382) at com.facebook.login.LoginManager.logInWithReadPermissions(LoginManager.java:250) at com.facebook.login.widget.LoginButton$LoginClickListener.onClick(LoginButton.java:689) at com.facebook.FacebookButtonBase.onClick(FacebookButtonBase.java:310)
我可以通过从 AndroidManifest.xml
中删除 LoginActivity 来解决这个问题<!--Remove this-->
<activity android:name="com.facebook.LoginActivity"
android:theme="@android:style/Theme.Translucent.NoTitleBar"
android:label="@string/app_name" />
并添加
<!--Add this-->
<activity android:name="com.facebook.FacebookActivity"
android:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation"
android:theme="@android:style/Theme.Translucent.NoTitleBar"
android:label="@string/app_name" />
所以我遇到了同样的问题并通过...在 Facebook developers page 上正确设置我的应用程序来解决它。
基本上我的应用程序丢失了:
- (Google播放)包名
- class姓名
- 一个密钥散列
一旦我填写这些,错误就消失了。
正在开发的应用程序和 facebook 的 Hash Key a/c 会要求两者的 hash key 必须相同。
public void getHashkey(){
try {
PackageInfo packageInfo = getPackageManager().getPackageInfo(getPackageName(),
PackageManager.GET_SIGNATURES);
for (Signature signature : packageInfo.signatures) {
MessageDigest md = MessageDigest.getInstance("SHA");
md.update(signature.toByteArray());
Log.d("KeyHash:", Base64.encodeToString(md.digest(), Base64.DEFAULT));
}
} catch (PackageManager.NameNotFoundException e1) {
Log.e("Name not found", e1.toString());
} catch (NoSuchAlgorithmException e) {
Log.e("No such an algorithm", e.toString());
} catch (Exception e) {
Log.e("Exception", e.toString());
}
}
在 Activity 的 onCreate() 中调用它并从日志中复制散列键(以 = 符号结尾)并注册到 facebook a/c 然后你就完成了。