所以我的Facebook登录我的Android应用程序并不是应该如何工作。
基本上我点击LoginButton并转发登录。当我点击设备上的返回按钮并尝试单击登录按钮时,登录窗口不会再次显示。
不确定如何解决这个问题? 一定是我做错了吗?
Mainifest文件。
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="uk.ac.tees.parse_fbintergration_example1"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="19" />
<uses-permission android:name="android.permission.INTERNET" android:maxSdkVersion="21"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity android:name="com.facebook.LoginActivity"/>
<activity
android:name=".MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<meta-data android:name="com.facebook.sdk.ApplicationId" android:value="@string/facebook_app_id"/>
</application>
</manifest>
的strings.xml
<?xml version="1.0" encoding="utf-8"?>
<string name="app_name">Parse_FBIntergration_Example1</string>
<string name="hello_world">Hello world!</string>
<string name="action_settings">Settings</string>
<string name="facebook_app_id">*FB_ID_HIDDEN*</string>
MainActivity.java
public class MainActivity extends FragmentActivity
{
private MainFragment frag;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if(savedInstanceState == null) {
frag = new MainFragment();
getSupportFragmentManager().beginTransaction().add(android.R.id.content, frag).commit();
} else {
frag = (MainFragment)getSupportFragmentManager().findFragmentById(android.R.id.content);
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
}
public class MainFragment extends Fragment {
private LoginButton loginBtn;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.activity_main, container, false);
loginBtn = (LoginButton)view.findViewById(R.id.login_button);
loginBtn.setFragment(this);
loginBtn.setReadPermissions(Arrays.asList("public_profile"));
return view;
}
}
答案 0 :(得分:1)
您的Mainfest.xml文件是否正确。我假设您正在使用facebook sdk 4.0等。
您需要添加片段并为具有Facebook登录按钮的布局充气。
<com.facebook.login.widget.LoginButton
android:id="@+id/fb_login_button"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center_horizontal"
android:layout_centerVertical="true"
android:layout_centerHorizontal="true"/>
在你的片段中
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
FacebookSdk.sdkInitialize(getActivity().getApplicationContext());
callbackManager = CallbackManager.Factory.create();
}
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
loginButton = (LoginButton) view.findViewById(R.id.login_button);
loginButton.setReadPermissions("email", "user_likes", "user_friends");
loginButton.setFragment(this);
loginButton.registerCallback(callbackManager, new FacebookCallback < LoginResult > () {@Override
public void onSuccess(LoginResult loginResult) {
//Handle your success result here
}
@Override
public void onCancel() {
Toast.makeText(getActivity(), "fail", Toast.LENGTH_SHORT).show();
}
@Override
public void onError(FacebookException exception) {
Toast.makeText(getActivity(), "error", Toast.LENGTH_SHORT).show();
}
});
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_facebook_login, container, false);
return view;
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
callbackManager.onActivityResult(requestCode, resultCode, data);
}
答案 1 :(得分:0)
**Process Login With Facebook**
**Working on Play Store**
**Link
- https://play.google.com/store/apps/details?id=com.codecube.airbucks&hl=en
**
Registered your new app? If you didn't, go to https://developers.facebook.com/apps/, click Add a New App in the top right and follow the instructions. **step by step**
**Manifest Permission**
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
**build.Gradle Dependency**
compile 'com.facebook.android:facebook-android-sdk:4.8.0' // in airbuck
/*compile 'com.facebook.android:facebook-android-sdk:[4,5)'*/
<activity android:name="com.facebook.FacebookActivity"
android:theme="@android:style/Theme.Translucent.NoTitleBar"
android:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation"
android:label="@string/app_name" />
<meta-data android:name="com.facebook.sdk.ApplicationName"
android:value="@string/app_name" />
<meta-data android:name="com.facebook.sdk.ApplicationId" android:value="@string/facebook_app_id"/>
<provider android:authorities="com.facebook.app.FacebookContentProvider1854328631556764"
android:name="com.facebook.FacebookContentProvider"
android:exported="true"/>
**Layout Xml Code**
<com.facebook.login.widget.LoginButton
android:id="@+id/login_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
**Put own generate facebook Key in String.xml File**
<string name="facebook_app_id">1854328631556764</string>
<string name="fb_login_protocol_scheme">fb1854328631556764</string>
**MainActivity CODE**
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main1);
FacebookSdk.sdkInitialize(this.getApplicationContext());
AppEventsLogger.activateApp(this);
callbackManager = CallbackManager.Factory.create();
fbloginButton = (LinearLayout) findViewById(R.id.facebook_button);
fbloginButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
int permissionCheck = ContextCompat.checkSelfPermission(MainActivity.this,
android.Manifest.permission.CAMERA);
if (permissionCheck == PackageManager.PERMISSION_GRANTED) {
//showing dialog to select image
callFacebook();
Log.e("permission", "granted");
} else {
ActivityCompat.requestPermissions(MainActivity.this,
new String[]{android.Manifest.permission.READ_EXTERNAL_STORAGE,
android.Manifest.permission.WRITE_EXTERNAL_STORAGE, android.Manifest.permission.CAMERA}, 1);
}
} else {
callFacebook();
}
}
});
}
**CAllOnFAcebook**
public void callFacebook() {
callbackManager = CallbackManager.Factory.create();
// LoginManager.getInstance().logInWithReadPermissions(MainActivity2.this, Arrays.asList("email"));
LoginManager.getInstance().logInWithReadPermissions(MainActivity.this, Arrays.asList("public_profile"));
LoginManager.getInstance().registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResult) {
Log.e("keshav","onSuccess called ");
GraphRequest request = GraphRequest.newMeRequest(
loginResult.getAccessToken(),
new GraphRequest.GraphJSONObjectCallback() {
@Override
public void onCompleted(
JSONObject object,
GraphResponse response) {
// Application code
Log.v("LoginActivityfacebook", response.toString());
try {
JSONObject data = response.getJSONObject();
facebookName = data.getString("name");
facebookEmail = data.getString("email");
facebookId = data.getString("id");
facebookLink = data.getString("link");
facebookLink = facebookLink.replace("https://www.facebook.com/app_scoped_user_id/", "");
facebookLink = facebookLink.replace("/", "");
Log.e("profilelink", "" + facebookLink);
facebookLink = "https://graph.facebook.com/" + facebookLink + "/picture";
Log.e("facebookName", "is -> " + facebookName);
Log.e("facebookEmail", "is -> " + facebookEmail);
Log.e("facebookId", "is -> " + facebookId);
Log.e("facebookLink", "is -> " + facebookLink);
Log.e("Keshav","Suceesfully Login "+facebookName);
} else {
CommonMethod.showAlert("Intenet Connectivity Failure", MainActivity.this);
}
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});
Bundle parameters = new Bundle();
parameters.putString("fields", "id,name,email,gender, birthday,link");
request.setParameters(parameters);
request.executeAsync();
}
@Override
public void onCancel() {
// App code
Log.i(TAG, "cancelTriggered");
}
@Override
public void onError(FacebookException exception) {
// App code
Log.i(TAG, "errorTriggered");
}
});
LoginManager.getInstance().logOut(); // TODO Add Me Using this previous facebook login id password logout
}
**Process Login With Facebook**
**Working on Play Store**
**Link https://play.google.com/store/apps/details?id=com.codecube.airbucks&hl=en**