• Anasayfa
  • Hakkımızda
  • Etkinlikler
  • Destek Verin
  • Site Haritası
  • Giriş Yap
  • Üye Ol
  • Facebook
  • Twitter
  • RSS
Yazılım Dilleri
  • Soru - Cevap
  • EĞİTİM SETİ
  • KATEGORİ
  • DUYURU
  • TEKNOLOJİ HABERLERİ

Son Sorular

  • 8/2/2020 11:38:31 PM'Basit' Yazılım Dili
  • 6/25/2020 3:18:13 PMderleme hatası
  • 12/11/2017 4:49:15 PMWindows Hizmeti Hk.
  • 4/23/2016 12:55:33 AMC programlama 2 oyun

Popüler Sorular

  • 5/27/2012 5:49:50 AMAsp.Net ile Date time alana veri ekleyemiiyorum ?
  • 4/2/2012 12:45:18 AM.exe uzantılı dosya için dijital imza nerde nasıl alınır.
  • 5/12/2012 8:44:49 AMAcil Yardım
  • 5/27/2012 1:46:51 PMveri tabanı bağlantısı
  • .Net Framework
  • 8085 Assembly
  • Active Directory
  • ADO.NET
  • Android
  • Apple IOS
  • Arduino
  • ASP.NET
  • ASP.NET MVC
  • Blackberry
  • C#.Net
  • C++
  • CCG Framework
  • CISCO
  • CSS
  • Diğer
  • Dreamweaver
  • Entity Framework
  • Exchange Server
  • Gömülü Sistemler
  • GSM Programlama
  • Güncel
  • Güvenlik
  • HTML5
  • Java
  • Javascript / JQuery
  • Jira
  • Kariyer ve İş Yaşamı
  • LibreOffice
  • LINQ
  • Linux
  • Matlab
  • Microsoft Dynamics CRM
  • Mobil Uygulama Geliştirme
  • MySQL
  • NoSQL
  • Oracle
  • OWIN
  • PFSense
  • PHP
  • Powershell
  • Python
  • Sanallastirma
  • SAP-ABAP
  • SCOM 2012
  • SEO
  • Sharepoint 2010
  • Sharepoint 2013
  • Silverlight
  • Sistem Analiz ve Tasarımı
  • SQL Server
  • Symantec
  • TFS
  • T-SQL
  • Ubuntu
  • VB.NET
  • Veritabanı Yönetim Sistemleri
  • Visual Studio
  • VMware
  • WCF
  • Web Hosting
  • Windows 8
  • Windows Azure
  • Windows Phone 7.1
  • Windows Phone 8
  • Windows Server
  • Wordpress
  • WPF
  • Xamarin
  • XNA
  • Yazılım Mühendisliği
  • Yöneylem Araştırması
  • ASP.NET MVC
  • Entity Framework
  • Javascript / JQuery
  • LINQ
  • PHP

Son Duyurular

IPhone 6 ve IPhone 6 Plus Teknik Özellikleri ve Fiyatı

IPhone 6 ve IPhone 6 Plus Teknik Özellikleri ve Fiyatı

DELL'in Yeni Projesi: USB Bilgisayar (Project Ophelia)

DELL'in Yeni Projesi: USB Bilgisayar (Project Ophelia)

Windows Phone Youtube Uygulaması Google ve Microsoft ile Yeniden Yapılıyor

Windows Phone Youtube Uygulaması Google ve Microsoft ile Yeniden Yapılıyor

Android ve Apple IOS Telefonlar için Blackberry Messenger (BBM)

Android ve Apple IOS Telefonlar için Blackberry Messenger (BBM)

Nokia Lumia 925 Teknik Özellikleri, Lumia 928 ve 920 ile Karşılaştırması

Nokia Lumia 925 Teknik Özellikleri, Lumia 928 ve 920 ile Karşılaştırması

LG Optimus G Pro Özellikleri ve Gözle Video Oynatma Teknolojisi

LG Optimus G Pro Özellikleri ve Gözle Video Oynatma Teknolojisi

Android Uygulamasından Facebook Duvarına Mesaj Gönderme

Öncelikle AndroidFacebookConnection adında yeni bir proje oluşturup facebook bağlantımızın en önemli temel kısmını bitirmiş oluyoruz.

19.07.2012

Yazar: Gül Yurdakul (Google+)

Kategori: Android

6561

Android Uygulamasından Facebook Duvarına Mesaj Gönderme

Öncelikle AndroidFacebookConnection adında yeni bir proje oluşturup facebook bağlantımızın en önemli temel kısmını bitirmiş oluyoruz. Daha sonra buradan com.facebook.android package ‘ini indirip uygulamanıza ekleyebilirsiniz. Eklediğinizde FbDialog.java class’ında hata verecektir gayet normal çünkü close adındaki resmi drawable klasörüne eklemediniz. Eklemeniz için buradan indirebilirsiniz. Bu package hazırdır kendiniz baştan bunu yazmayınız. Başta oluşturduğunuz package ‘in içerisine yeni class’lar oluşturuyoruz. İlk class’ ımız;

BaseDialogListener.java

package com.AndroidFacebook.Connection;

import com.facebook.android.DialogError;

import com.facebook.android.Facebook.DialogListener;

import com.facebook.android.FacebookError;

/**

 * Skeleton base class for RequestListeners, providing default error

 * handling. Applications should handle these error conditions.

 *

 */

public abstract class BaseDialogListener implements DialogListener {

 

    public void onFacebookError(FacebookError e) {

        e.printStackTrace();

    }

 

    public void onError(DialogError e) {

        e.printStackTrace();       

    }

 

    public void onCancel() {       

    }

   

}

BaseDialogListener sınıfı DialogListener interface’ ini implement eder.

Bu class bizim error classlarımızdan biridir diyebiliriz. Gerekli hatalarda hata durumuna göre işlem yapmanısını sağlar.

BaseRequestListener.java

package com.AndroidFacebook.Connection;

 

import java.io.FileNotFoundException;

import java.io.IOException;

import java.net.MalformedURLException;

import android.util.Log;

import com.facebook.android.AsyncFacebookRunner.RequestListener;

import com.facebook.android.FacebookError;

 

/**

 * Skeleton base class for RequestListeners, providing default error

 * handling. Applications should handle these error conditions.

 *

 */

public abstract class BaseRequestListener implements RequestListener {

 

    public void onFacebookError(FacebookError e, final Object state) {

        Log.e("Facebook", e.getMessage());

        e.printStackTrace();

    }

 

    public void onFileNotFoundException(FileNotFoundException e,

                                        final Object state) {

        Log.e("Facebook", e.getMessage());

        e.printStackTrace();

    }

 

    public void onIOException(IOException e, final Object state) {

        Log.e("Facebook", e.getMessage());

        e.printStackTrace();

    }

 

    public void onMalformedURLException(MalformedURLException e,

                                        final Object state) {

        Log.e("Facebook", e.getMessage());

        e.printStackTrace();

    }

   

}

 

BaseRequestListener class’ ımızda  üstdeki BaseDialogListener class’ına benzerdir. Error class’ ıdır. Farkı ise, bu class RequestListener interface’ini implement eder ve hataları log’ da gösterir.

SessionEvents.java

/*

 * Copyright 2010 Facebook, Inc.

*/

 

package com.AndroidFacebook.Connection;

 

import java.util.LinkedList;

 

public class SessionEvents {

 

    private static LinkedList<AuthListener> mAuthListeners =

        new LinkedList<AuthListener>();

    private static LinkedList<LogoutListener> mLogoutListeners =

        new LinkedList<LogoutListener>();

 

    /**

     * Associate the given listener with this Facebook object. The listener's

     * callback interface will be invoked when authentication events occur.

     *

     * @param listener

     *            The callback object for notifying the application when auth

     *            events happen.

     */

    public static void addAuthListener(AuthListener listener) {

        mAuthListeners.add(listener);

    }

 

    /**

     * Remove the given listener from the list of those that will be notified

     * when authentication events occur.

     *

     * @param listener

     *            The callback object for notifying the application when auth

     *            events happen.

     */

    public static void removeAuthListener(AuthListener listener) {

        mAuthListeners.remove(listener);

    }

 

    /**

     * Associate the given listener with this Facebook object. The listener's

     * callback interface will be invoked when logout occurs.

     *

     * @param listener

     *            The callback object for notifying the application when log out

     *            starts and finishes.

     */

    public static void addLogoutListener(LogoutListener listener) {

        mLogoutListeners.add(listener);

    }

 

    /**

     * Remove the given listener from the list of those that will be notified

     * when logout occurs.

     *

     * @param listener

     *            The callback object for notifying the application when log out

     *            starts and finishes.

     */

    public static void removeLogoutListener(LogoutListener listener) {

        mLogoutListeners.remove(listener);

    }

   

    public static void onLoginSuccess() {

        for (AuthListener listener : mAuthListeners) {

            listener.onAuthSucceed();

        }

    }  

    public static void onLoginError(String error) {

        for (AuthListener listener : mAuthListeners) {

            listener.onAuthFail(error);

        }

    }  

    public static void onLogoutBegin() {

        for (LogoutListener l : mLogoutListeners) {

            l.onLogoutBegin();

        }

    }

    public static void onLogoutFinish() {

        for (LogoutListener l : mLogoutListeners) {

            l.onLogoutFinish();

        }  

    }

    /**

     * Callback interface for authorization events.

     *

     */

    public static interface AuthListener {

 

        /**

         * Called when a auth flow completes successfully and a valid OAuth

         * Token was received.

         *

         * Executed by the thread that initiated the authentication.

         *

         * API requests can now be made.

         */

        public void onAuthSucceed();

 

        /**

         * Called when a login completes unsuccessfully with an error.

         * 

         * Executed by the thread that initiated the authentication.

         */

        public void onAuthFail(String error);

    }

    /**

     * Callback interface for logout events.

     *

     */

    public static interface LogoutListener {

        /**

         * Called when logout begins, before session is invalidated. 

         * Last chance to make an API call. 

         *

         * Executed by the thread that initiated the logout.

         */

        public void onLogoutBegin();

 

        /**

         * Called when the session information has been cleared.

         * UI should be updated to reflect logged-out state.

         *

         * Executed by the thread that initiated the logout.

         */

        public void onLogoutFinish();

    }  

}

 

SessionEvents class’ı Facebook tarafından android için hazır yapılmıştır. Bu class uygulamadan facebook’ a giriş de login kısmını yönetir.

SessionStore.java

import com.facebook.android.Facebook;

import android.content.Context;

import android.content.SharedPreferences;

import android.content.SharedPreferences.Editor;

 

public class SessionStore {

   

    private static final String TOKEN = "access_token";

    private static final String EXPIRES = "expires_in";

    private static final String KEY = "facebook-session";

   

    public static boolean save(Facebook session, Context context) {

        Editor editor =

            context.getSharedPreferences(KEY, Context.MODE_PRIVATE).edit();

        editor.putString(TOKEN, session.getAccessToken());

        editor.putLong(EXPIRES, session.getAccessExpires());

        return editor.commit();

    }

    public static boolean restore(Facebook session, Context context) {

        SharedPreferences savedSession =

            context.getSharedPreferences(KEY, Context.MODE_PRIVATE);

        session.setAccessToken(savedSession.getString(TOKEN, null));

        session.setAccessExpires(savedSession.getLong(EXPIRES, 0));

        return session.isSessionValid();

    }

    public static void clear(Context context) {

        Editor editor =

            context.getSharedPreferences(KEY, Context.MODE_PRIVATE).edit();

        editor.clear();

        editor.commit();

    }

}

SessionStore.java class’ı facebook’ a girişdeki login durumunda daha önce login olmuşsa login ekranı gelmeden direkt facebook duvarında yayım yapar. Eğer daha önce login olmamışsa ilk login ekranı gelir ve login olduktan sonra logindeki bilgileri kaydeder.

FacebookConnector.java

package com.AndroidFacebook.Connection;

 

import java.io.IOException;

import android.app.Activity;

import android.content.Context;

import android.os.Bundle;

import android.os.Handler;

import com.facebook.android.AsyncFacebookRunner;

import com.AndroidFacebook.Connection.SessionEvents.AuthListener;

import com.AndroidFacebook.Connection.SessionEvents.LogoutListener;

import com.facebook.android.DialogError;

import com.facebook.android.Facebook;

import com.facebook.android.Facebook.DialogListener;

import com.facebook.android.FacebookError;

 

public class FacebookConnector {

 

      private Facebook facebook = null;

      private Context context;

      private String[] permissions;

      private Handler mHandler;

      private Activity activity;

      private SessionListener mSessionListener = new SessionListener();;

     

      public FacebookConnector(String appId,Activity activity,Context context,String[] permissions) {

            this.facebook = new Facebook(appId);

           

            SessionStore.restore(facebook, context);

        SessionEvents.addAuthListener(mSessionListener);

        SessionEvents.addLogoutListener(mSessionListener);

       

            this.context=context;

            this.permissions=permissions;

            this.mHandler = new Handler();

            this.activity=activity;

      }

      public void login() {

        if (!facebook.isSessionValid()) {

            facebook.authorize(this.activity, this.permissions,new LoginDialogListener());

        }

    }

      public void logout() {

        SessionEvents.onLogoutBegin();

        AsyncFacebookRunner asyncRunner = new AsyncFacebookRunner(this.facebook);

        asyncRunner.logout(this.context, new LogoutRequestListener());

      }

      public void postMessageOnWall(String msg) {

            if (facebook.isSessionValid()) {

                Bundle parameters = new Bundle();

                parameters.putString("message", msg);

                try {

                        String response = facebook.request("me/feed", parameters,"POST");

                        System.out.println(response);

                  } catch (IOException e) {

                        e.printStackTrace();

                  }

            } else {

                  login();

            }

      }    

    private final class LoginDialogListener implements DialogListener {

        public void onComplete(Bundle values) {

            SessionEvents.onLoginSuccess();

        }

 

        public void onFacebookError(FacebookError error) {

            SessionEvents.onLoginError(error.getMessage());

        }

        public void onError(DialogError error) {

            SessionEvents.onLoginError(error.getMessage());

        }

        public void onCancel() {

            SessionEvents.onLoginError("Action Canceled");

        }

    }

    public class LogoutRequestListener extends BaseRequestListener {

        public void onComplete(String response, final Object state) {

            // callback should be run in the original thread,

            // not the background thread

            mHandler.post(new Runnable() {

                public void run() {

                    SessionEvents.onLogoutFinish();

                }

            });

        }

    }

    private class SessionListener implements AuthListener, LogoutListener {

        public void onAuthSucceed() {

            SessionStore.save(facebook, context);

        }

        public void onAuthFail(String error) {

        }

        public void onLogoutBegin() {          

        }

        public void onLogoutFinish() {

            SessionStore.clear(context);

        }

    }

      public Facebook getFacebook() {

            return this.facebook;

      }

}

 

FacebookConnector class’ımızda daha önce oluşturduğumuz class’ları da kullanarak facebook bağlantısının tamamlanıp duvara post atma kısmının gerçekleştiği yerdir. Burada asıl post işini postMessageOnWall metodu yapmaktadır. Bu method bir string parametresi almıştır. Sadece yazı paylaşır. Bunun yanı sıra resimde paylaşmak istiyorsak bir tane daha string parametre ekleriz. Resimi server’a ekleyip resmin url’sini de activity’ de ikinci kullandığımız string parametre yerine yazarız. Bu şekilde hem yazı hem resim post etmiş oluruz.

Böylelikle class’ları bitirmiş olduk. Şimdi Activity’ e geldik. Activity de gösterilecek olan ekranda sadece bir butonumuz olacak ve biz bu butona tıkladığımızda duvara mesajı post edecek.

main.xml

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

    android:orientation="vertical"

    android:layout_width="fill_parent"

    android:layout_height="fill_parent"

    >

      <Button

    android:id="@+id/btn_post"

      android:layout_width="wrap_content"

      android:layout_height="wrap_content"

    android:text="Post Deneme"/>

</LinearLayout>

Android uygulamalarında Facebook bağlantısı kullanabilmek için developer.facebook.com sitesinden üye olup deneme bir uygulamayı kaydettirdiğinizde facebook bir application id veriyor. Bunu activity de kod içinde kullancağız.

AndroidFacebookConnectionActivity.java

package com.AndroidFacebook.Connection;

 

import java.util.Date;

import android.app.Activity;

import android.content.Intent;

import android.os.Bundle;

import android.os.Handler;

import android.util.Log;

import android.view.View;

import android.widget.Button;

import android.widget.Toast;

 

public class AndroidFacebookConnectionActivity extends Activity {

      private static final String FACEBOOK_APPID = "**************";

      private static final String FACEBOOK_PERMISSION = "publish_stream";

      private static final String TAG = "FacebookOrnek";

      private static final String MSG = "Message from Deneme";

      private final Handler mFacebookHandler = new Handler();

      private FacebookConnector facebookConnector;

     

    final Runnable mUpdateFacebookNotification = new Runnable() {

        public void run() {

            Toast.makeText(getBaseContext(), "Facebook updated !", Toast.LENGTH_LONG).show();

        }

    };

      @Override

    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.main);

        this.facebookConnector = new FacebookConnector(FACEBOOK_APPID, this, getApplicationContext(), new String[] {FACEBOOK_PERMISSION});

       

        Button pst_message = (Button) findViewById(R.id.btn_post);

        pst_message.setOnClickListener(new View.OnClickListener() {

            /**

             * Send a message. If the user hasn't authenticated to Facebook yet, he'll be redirected via a browser

             * to the facebook login page. Once the user authenticated, he'll authorize the Android application to send

             * posts on the users behalf.

             */

            public void onClick(View v) {

                  postMessage();

            }

        });

      }

      @Override

      protected void onActivityResult(int requestCode, int resultCode, Intent data) {

            this.facebookConnector.getFacebook().authorizeCallback(requestCode, resultCode, data);

      }

      @Override

      protected void onResume() {

            super.onResume();

      }

      private String getFacebookMsg() {

            return MSG + " at " + new Date().toLocaleString();

      }    

      public void postMessage() {    

            if (facebookConnector.getFacebook().isSessionValid()) {

                  postMessageInThread();

            } else {

                  SessionEvents.AuthListener listener = new SessionEvents.AuthListener() {     

                        @Override

                        public void onAuthSucceed() {

                             postMessageInThread();

                        }

                        @Override

                        public void onAuthFail(String error) {

                        }

                  };

                  SessionEvents.addAuthListener(listener);

                  facebookConnector.login();

            }

      }

      private void postMessageInThread() {

            Thread t = new Thread() {

                  public void run() {                 

                  try {

                        facebookConnector.postMessageOnWall(getFacebookMsg());

                             mFacebookHandler.post(mUpdateFacebookNotification);

                        } catch (Exception ex) {

                             Log.e(TAG, "Error sending msg",ex);

                        }

                }

            };

            t.start();

      }

}

Butona tıklandığında ekranda “Message from Deneme” ve zamanı çıkıyor.

Bunları yaptıktan sonra en önemli şeyi unutmayın. Manifest dosyanıza internet iznini vermeyi unutmayın sakın. Yoksa hata alırsınız.

Böylelikle bir makaleninde sonuna gelmiş bulunuyoruz. Önümüzdeki makalelerde görüşmek üzere. Sağlıcakla kalın J

 

 Gül YURDAKUL

www.gulyurdakul.com

 

 

 

Yazar Hakkında

Gül Yurdakul

Gül Yurdakul

www.gulyurdakul.com

1990 doğumlu Gül Yurdakul, Eskişehir Osmangazi Üniversitesi 3. sınıf öğrencisidir. Bir çok projede çalışmıştır. Özel bir yazılım firmasında mobil yazılım üzerine çalışmış olup şu an kendini geliştirmekte ve part-time iş aramaktadır. Uzmanlaşmış olduğu alanlar: C, C++, Visual C#, Android, Sql 2008, Object Oriented, JavaScript.

Sosyal Medya

ORANLAR

  • 6561izleme

Arkadaşlarınla Paylaş

  • Tweet

0 Yorum

Yorum Yaz / Soru Sor

Lütfen yorum yazmak veya soru sormak için üye girişi yapınız.

Son Yorumlar

  • Böyle bir sayfalama ağ trafiğini hafifleti...
  • Böyle bir sayfalama ağ trafiğini hafifleti...
  • Merhaba, ellerinize sağlık çok yardımcı ol...
  • Merhaba Bu uygulama örneğinden ASP.net ...
  • Hocam Link başka sayfaya yönlendiriyor.

En Güncel Sorular

  • Bilgilendirme maili (C#.Net)
  • Power Pivot (Sharepoint 2010)
  • BigInteger, BigDecimal (Asp.Net ve Asp.Net MVC)
  • visual C# ile asp nette veritabanı islemleri (Asp.Net ve Asp.Net MVC)
  • Share Point ile Dosya Arşiv Yönetim Sistemi yapılabilir mi ? (Sharepoint 2010)

En Son Cevap Verilen Sorular

  • Bilgilendirme maili
  • BigInteger, BigDecimal
  • visual C# ile asp nette veritabanı islemleri
  • Share Point ile Dosya Arşiv Yönetim Sistemi yapılabilir mi ?
  • txt dosyasına veri yazma

Twitter

Takip et: @yazilim_dilleri

En Çok Okunanlar

Elif BAYRAKDAR

C# ile SQL Server Bağlantısı, Insert, Update ve Delete Sorguları

23.05.2013

  • 123823
  • 0
Hakan Keskin

C# ile Windows Service Projesi Oluşturma, Debug Etme ve Setup Hazırlama

17.12.2013

  • 70897
  • 0
batuhan avlayan

Php - Mail Gönderme (İletişim Formu)

02.09.2013

  • 51538
  • 0

Sponsorlar

KODLAB
Pluralsight
Exchange server is
Office 365
YAZILIM DİLLERİ
Yukarı Çık
  • Hakkımızda
  • Facebook
  • Twitter
  • RSS

© Yazılım Dillerinin Buluşma Noktası | Kaynak belirtildiği sürece makaleler kopyalanabilir.
YazilimDilleri.Net sitesinde yer alan kullanıcıların oluşturduğu tüm içeriklerin yayınlanması ile ilgili yasal yükümlülükler içeriği oluşturan kullanıcıya aittir, YazilimDilleri.Net hiçbir şekilde sorumlu değildir.

Kapat

Giriş Yap

Kullanıcı Adı

Şifre

Şifremi Unuttum

KULLANICI GİRİŞİ