Why my Facebook saying null - Apple Community
Cannot read property 'facebook' of null
flutter - facebook login is passing null - Stack Overflow
Android facebook applicationId cannot be null - Stack Overflow
Videos
TL;DR: you have to write your application's ID in your
strings.xmland then reference (i.e.@strings/fb_app_id), because if you put it directly (as value) intoAndroidManifest.xmlit won't work.
you must define your applicationId in the AndroidManifest.xml
like this:
<meta-data android:name="com.facebook.sdk.ApplicationId" android:value="@string/app_id"/>
under <application android:label="@string/app_name".... tag
where app_id is a string within your strings.xml.
sample:
<application android:label="@string/app_name"
android:icon="@drawable/icon"
android:theme="@android:style/Theme.NoTitleBar"
>
<activity android:name=".HelloFacebookSampleActivity"
android:label="@string/app_name"
android:windowSoftInputMode="adjustResize">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
<activity android:name="com.facebook.LoginActivity"
android:theme="@android:style/Theme.Translucent.NoTitleBar"
android:label="@string/app_name" />
<meta-data android:name="com.facebook.sdk.ApplicationId" android:value="@string/app_id"/>
</application>
** please note <meta-data android:name="com.facebook.sdk.ApplicationId" android:value="@string/app_id"/> is within <application> tag
-- and in strings.xml
<string name="app_id">1389xxxxxxxx</string>
Since today the answer is not quite correct.
If someone didn't use this:
AppEventsLogger.activateApp(this);
Since last update you must do it or your app will crashed. And you also should pass Application here not Context
https://developers.facebook.com/docs/android/getting-started
// Add this to the header of your file:
import com.facebook.FacebookSdk;
public class MyApplication extends Application {
// Updated your class body:
@Override
public void onCreate() {
super.onCreate();
// Initialize the SDK before executing any other operations,
FacebookSdk.sdkInitialize(getApplicationContext());
AppEventsLogger.activateApp(this);
}
}
Try this Code I hope Its Work..
facebookimage(object.getString("id"));
This is Method:
private void facebookimage(String id) {
new getFacebookImage(id).execute();
}
This is AsyncTask class to get Profile Image on Facebook ;
private class getFacebookImage extends AsyncTask {
String userID;
Bitmap camera;
public getFacebookImage(String id) {
userID=id;
}
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected Object doInBackground(Object[] params) {
URL imageURL = null;
Bitmap bitmap=null;
try {
imageURL = new URL("https://graph.facebook.com/" + userID + "/picture?type=large");
bitmap = BitmapFactory.decodeStream(imageURL.openConnection().getInputStream());
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
Log.e("String Image",""+bitmap);
camera=bitmap;
return bitmap;
}
@Override
protected void onPostExecute(Object o) {
super.onPostExecute(o);
if(camera != null){
Log.e("Image Load","UPload image");
ByteArrayOutputStream stream = new ByteArrayOutputStream();
camera.compress(Bitmap.CompressFormat.JPEG, 100, stream);
byte imageInByte[] = stream.toByteArray();
String encodedImage = Base64.encodeToString(imageInByte, Base64.DEFAULT);
DataBase.setUserImage(LoginActivity.this,encodedImage);
}
}
}
Initially I was getting only id and email in JSONObject object of onCompleted. Even though I set permissions like "public_profile" and "email" which is sufficient enough to get the id, name, email and profile picture from facebook. But somewhere I went wrong and didn't understand and added Profile and did getProfile() so I can get the name and profile picture. Then other problem arised was even after login perfectly, I was getting null profile sometimes(may be once in 5 times). For that had to put Profile Tracker and this was because Profile works Asynchronously(was too confusing for me as you have to put trackers and start & stop tracking).
Then I realized where I went wrong. In the bundle where we need to mention what all we want in the json object as reply, I had only mentioned "id". So now in the below code I added "name" and "email" as well. So in the JSONObject object response I get the name and email as well.
And for profile picture I saw How can I display the users profile pic using the facebook graph api? and implemented this using Uri builder Use URI builder in Android or create URL with variables . So with this I removed the use of Profile completely and still getting all the data I wanted.
This answer is the mixture of both the answers mentioned by Destro - Android Facebook Login- Profile is null & How to get email id From Android Facebook SDK 4.6.0?
FacebookCallback<LoginResult> facebookCallback = new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(final LoginResult loginResult) {
GraphRequest request = GraphRequest.newMeRequest(
loginResult.getAccessToken(),
new GraphRequest.GraphJSONObjectCallback() {
@Override
public void onCompleted(JSONObject object, GraphResponse response) {
if (BuildConfig.DEBUG) {
FacebookSdk.setIsDebugEnabled(true);
FacebookSdk.addLoggingBehavior(LoggingBehavior.INCLUDE_ACCESS_TOKENS);
String uid = object.optString("id");
String email = object.optString("email");
String name = object.optString("name");
Uri.Builder builder = new Uri.Builder();
builder.scheme("https")
.authority("graph.facebook.com")
.appendPath(uid)
.appendPath("picture")
.appendQueryParameter("width", "1000")
.appendQueryParameter("height", "1000");
Uri pictureUri = builder.build();
try {
sendLogin(uid, name, email, pictureUri.toString(), "fb");
} catch (JSONException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
facebookLogout();
}
}
});
Bundle parameters = new Bundle();
parameters.putString("fields", "id, name, email");
request.setParameters(parameters);
request.executeAsync();
}
@Override
public void onCancel() {
}
@Override
public void onError(FacebookException e) {
Toast.makeText(getApplication(), "Something went wrong, please try again later", Toast.LENGTH_LONG).show();
}
};
public void facebookLogout() {
LoginManager.getInstance().logOut();
}
This is the notification that I've received. I would really like to know who the girl is, but I'm afraid of opening the notification in case this is a virus? Will opening the notification show me this girl's name?