I social network oramai governano anche sulle app, una app di successo, lo è solo se riesce ad espandersi anche sui social tra i nostri amici, quindi, come fare per integrare il più famoso social network nella nostra applicazione semplicemente?
Facebook ovviamente mette a disposizione una SDK ufficiale, la quale però, è molto pesante, difficile da implementare, e molto molto limitativa, per questo ci sono alcuni ragazzi, che hanno sviluppato una SDK non ufficiale, che fa seria invidia alla sdk ufficiale!
Sul sito della SDK, ovverosia QUI è possibile scaricare tali librerie, del peso di pochi kb, ma anche degli esempi.
Purtroppo, gli esempi presenti sul web sono ottimizzati per vecchie versioni di Android, quindi non c’è più possibilità di implementare tali librerie dalla 4.0 in poi, senza modificare tali esempi, o inserire permessi speciali nella Activity, ma tali permessi non sono globalmente accettati, spesso causando un NetworkOnThreadMainException! Ossia l’uso non consentito di un’operazione “network” sul main.
L’esempio più semplice trovato per il web è questo:
package facebook;
import com.easy.facebook.android.apicall.GraphApi;
import com.easy.facebook.android.data.User;
import com.easy.facebook.android.error.EasyFacebookError;
import com.easy.facebook.android.facebook.FBLoginManager;
import com.easy.facebook.android.facebook.Facebook;
import com.easy.facebook.android.facebook.LoginListener;
import com.example.tecnoandroid.R;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.os.StrictMode;
import android.util.Log;
public class KodeFunFBAppActivity extends Activity implements LoginListener {
/** Called when the activity is first created. */
private FBLoginManager fbLoginManager;
//replace it with your own Facebook App ID
public final String KODEFUNFBAPP_ID = "ID_APPLICAZIONE_FACEBOOK";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//setContentView(R.layout.main);
connectToFacebook();
}
public void connectToFacebook(){
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
//read about Facebook Permissions here:
//https://developers.facebook.com/docs/reference/api/permissions/
String permissions[] = {
"user_about_me",
"user_activities",
"user_birthday",
"user_checkins",
"user_education_history",
"user_events",
"user_groups",
"user_hometown",
"user_interests",
"user_likes",
"user_location",
"user_notes",
"user_online_presence",
"user_photo_video_tags",
"user_photos",
"user_relationships",
"user_relationship_details",
"user_religion_politics",
"user_status",
"user_videos",
"user_website",
"user_work_history",
"email",
"read_friendlists",
"read_insights",
"read_mailbox",
"read_requests",
"read_stream",
"xmpp_login",
"ads_management",
"create_event",
"manage_friendlists",
"manage_notifications",
"offline_access",
"publish_checkins",
"publish_stream",
"rsvp_event",
"sms",
//"publish_actions",
"manage_pages"
};
fbLoginManager = new FBLoginManager(this,
R.layout.activity_anteprima,
KODEFUNFBAPP_ID,
permissions);
if(fbLoginManager.existsSavedFacebook()){
fbLoginManager.loadFacebook();
}
else{
fbLoginManager.login();
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, android.content.Intent data){
if(data!=null)
fbLoginManager.loginSuccess(data);
else
finish();
}
public void loginSuccess(Facebook facebook) {
GraphApi graphApi = new GraphApi(facebook);
User user = new User();
try{
user = graphApi.getMyAccountInfo();
Intent i=getIntent();
graphApi.setStatus(
i.getStringExtra("messaggio"),
);
} catch(EasyFacebookError e){
Log.d("TAG: ", e.toString());
}
fbLoginManager.displayToast("Hey, " + user.getFirst_name() + "! Login success!");
finish();
}
public void logoutSuccess() {
fbLoginManager.displayToast("Logout Success!");
finish();
}
public void loginFail() {
fbLoginManager.displayToast("Login Failed!");
finish();
}
private String url;
}
Modifichiamo per evitare l’eccezione:
public class KodeFunFBAppActivity extends Activity implements LoginListener {
/** Called when the activity is first created. */
private FBLoginManager fbLoginManager;
//replace it with your own Facebook App ID
public final String KODEFUNFBAPP_ID = "ID_APPLICAZIONE_FACEBOOK";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//setContentView(R.layout.main);
connectToFacebook();
}
public void connectToFacebook(){
//read about Facebook Permissions here:
//https://developers.facebook.com/docs/reference/api/permissions/
String permissions[] = {
"user_about_me",
"user_activities",
"user_birthday",
"user_checkins",
"user_education_history",
"user_events",
"user_groups",
"user_hometown",
"user_interests",
"user_likes",
"user_location",
"user_notes",
"user_online_presence",
"user_photo_video_tags",
"user_photos",
"user_relationships",
"user_relationship_details",
"user_religion_politics",
"user_status",
"user_videos",
"user_website",
"user_work_history",
"email",
"read_friendlists",
"read_insights",
"read_mailbox",
"read_requests",
"read_stream",
"xmpp_login",
"ads_management",
"create_event",
"manage_friendlists",
"manage_notifications",
"offline_access",
"publish_checkins",
"publish_stream",
"rsvp_event",
"sms",
"publish_actions",
"manage_pages"
};
fbLoginManager = new FBLoginManager(this,
R.layout.activity_anteprima,
KODEFUNFBAPP_ID,
permissions);
if(fbLoginManager.existsSavedFacebook()){
fbLoginManager.loadFacebook();
}
else{
fbLoginManager.login();
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, android.content.Intent data){
if(data!=null)
fbLoginManager.loginSuccess(data);
else
finish();
}
private GraphApi graphApi;
private User user;
public void loginSuccess(Facebook facebook) {
graphApi = new GraphApi(facebook);
user = new User();
SetStatus ss=new SetStatus();
ss.execute();
}
class SetStatus extends AsyncTask{
@Override
public void onPostExecute(Object a){
fbLoginManager.displayToast("Hey, " + user.getFirst_name() +"! Login success!");
finish();
}
@Override
protected Object doInBackground(Object... arg0) {
try{
user = graphApi.getMyAccountInfo();
Intent i=getIntent();
graphApi.setStatus(
i.getStringExtra("messaggio"),
);
} catch(EasyFacebookError e){
Log.d("TAG: ", e.toString());
}
return null;
}
}
public void logoutSuccess() {
fbLoginManager.displayToast("Logout Success!");
finish();
}
public void loginFail() {
fbLoginManager.displayToast("Login Failed!");
finish();
}
private String url;
}
Ci basterà semplicemente inserire o adattare a noi, questa classe, e facebook sarà correttamente integrato nella nostra applicazione.
L’esempio mostra solo come settare uno stato, ma ovviamente guardando le varie documentazioni, sarà possibile aggiungere moltissime altre funzioni! Tutte ovviamente seguendo la struttura del codice, per evitare errori!