8 – Phonegap – Cordova Facebook Login Kullanımı

Uygulamanızda facebook login kullanmak için öncelikle facebook üzerinde bir uygulama kimliği oluşturmalısınız . Google da ufak bir arama ile bunu nasıl yapacağınızı bulabilrsiniz .

Facebookda bir uygulama kimliğiniz olduğunu varsayıyor ve öyle devam ediyorum .

Öncelikle projenize facebook plugin i dahil ediyoruz .

Aşağıdaki komutu terminal ekranına yapıştırıp download etmesini bekliyoruz

$ git clone https://github.com/Wizcorp/phonegap-facebook-plugin.git

– Download dan sonra terminal ekranından projemizin olduğu dizine gidiyoruz

– Aşağıdaki komutu uyguluyoruz

$ phonegap local plugin add /Users/macbook/phonegap-facebook-plugin –variable APP_ID=”facebookdan aldığınız app id yazılacak” –variable APP_NAME=”facebookda belirttiğiniz uygulama adı yazılacak”

komutunu uyguluyoruz . /Users/macbook/phonegap-facebook-plugin  bu kısım downlopad ettiğimiz dosyanın yolu kendinize gore değiştirin .

Bu işlemler bittikden sonra  gerekli javascript dosyalarını ve kodlarını projeye ekleyelim.

head tagları arasına <script type=”text/javascript” src=”js/facebookConnectPlugin.js”></script>

facebookConnectPlugin.js dosyamızı dahil ediyoruz

facebookConnectPlugin.js dosyasının içeriği şöyle :

"use strict";

/*
 * @author Ally Ogilvie
 * @copyright Wizcorp Inc. [ Incorporated Wizards ] 2014
 * @file - facebookConnectPlugin.js
 * @about - JavaScript interface for PhoneGap bridge to Facebook Connect SDK
 *
 *
 */

if (cordova.platformId == "browser") {

    var facebookConnectPlugin = {

        getLoginStatus: function (s, f) {
            // Try will catch errors when SDK has not been init
            try {
                FB.getLoginStatus(function (response) {
                    s(response);
                });
            } catch (error) {
                if (!f) {
                    console.error(error.message);
                } else {
                    f(error.message);
                }
            }
        },

        showDialog: function (options, s, f) {

            if (!options.name) {
                options.name = "";
            }
            if (!options.message) {
                options.message = "";
            }
            if (!options.caption) {
                options.caption = "";
            }
            if (!options.description) {
                options.description = "";
            }
            if (!options.href) {
                options.href = "";
            }
            if (!options.picture) {
                options.picture = "";
            }
            
            // Try will catch errors when SDK has not been init
            try {
                FB.ui(options,
                function (response) {
                    if (response && (response.request || !response.error_code)) {
                        s(response);
                    } else {
                        f(response);
                    }
                });
            } catch (error) {
                if (!f) {
                    console.error(error.message);
                } else {
                    f(error.message);
                }
            }
        },
        // Attach this to a UI element, this requires user interaction.
        login: function (permissions, s, f) {
            // JS SDK takes an object here but the native SDKs use array.
            var permissionObj = {};
            if (permissions && permissions.length > 0) {
                permissionObj.scope = permissions.toString();
            }
            
            FB.login(function (response) {
                if (response.authResponse) {
                    s(response);
                } else {
                    f(response.status);
                }
            }, permissionObj);
        },

        getAccessToken: function (s, f) {
            var response = FB.getAccessToken();
            if (!response) {
                if (!f) {
                    console.error("NO_TOKEN");
                } else {
                    f("NO_TOKEN");
                }
            } else {
                s(response);
            }
        },

        logEvent: function (eventName, params, valueToSum, s, f) {
            // AppEvents are not avaliable in JS.
            s();
        },

        logPurchase: function (value, currency, s, f) {
            // AppEvents are not avaliable in JS.
            s();
        },

        logout: function (s, f) {
            // Try will catch errors when SDK has not been init
            try {
                FB.logout( function (response) {
                    s(response);
                });
            } catch (error) {
                if (!f) {
                    console.error(error.message);
                } else {
                    f(error.message);
                }
            }
        },

        api: function (graphPath, permissions, s, f) {
            // JS API does not take additional permissions
            
            // Try will catch errors when SDK has not been init
            try {
                FB.api(graphPath, function (response) {
                    if (response.error) {
                        f(response);
                    } else {
                        s(response);
                    }
                });
            } catch (error) {
                if (!f) {
                    console.error(error.message);
                } else {
                    f(error.message);
                }
            }
        },

        // Browser wrapper API ONLY
        browserInit: function (appId, version) {
            if (!version) {
                version = "v2.0";
            }
            FB.init({
                appId      : appId,
                cookie     : true,
                xfbml      : true,
                version    : version
            });
        }
    };
    
    // Bake in the JS SDK
    (function () {
        if (!window.FB) {
            console.log("launching FB SDK");
            var e = document.createElement('script');
            e.src = document.location.protocol + '//connect.facebook.net/en_US/sdk.js';
            e.async = true;
            document.getElementById('fb-root').appendChild(e);
            if (!window.FB) {
                // Probably not on server, use the sample sdk
                e.src = 'phonegap/plugin/facebookConnectPlugin/fbsdk.js';
                document.getElementById('fb-root').appendChild(e);
                console.log("Attempt local load: ", e);
            }
        }
    }());

    module.exports = facebookConnectPlugin;

} else {

    var exec = require("cordova/exec");

    var facebookConnectPlugin = {

        getLoginStatus: function (s, f) {
            exec(s, f, "FacebookConnectPlugin", "getLoginStatus", []);
        },

        showDialog: function (options, s, f) {
            exec(s, f, "FacebookConnectPlugin", "showDialog", [options]);
        },

        login: function (permissions, s, f) {
            exec(s, f, "FacebookConnectPlugin", "login", permissions);
        },

        logEvent: function(name, params, valueToSum, s, f) {
            // Prevent NSNulls getting into iOS, messes up our [command.argument count]
            if (!params && !valueToSum) {
                exec(s, f, "FacebookConnectPlugin", "logEvent", [name]);
            } else if (params && !valueToSum) {
                exec(s, f, "FacebookConnectPlugin", "logEvent", [name, params]);
            } else if (params && valueToSum) {
                exec(s, f, "FacebookConnectPlugin", "logEvent", [name, params, valueToSum]);
            } else {
                f("Invalid arguments");
            }
        },

        logPurchase: function(value, currency, s, f) {
            exec(s, f, "FacebookConnectPlugin", "logPurchase", [value, currency]);
        },

        getAccessToken: function(s, f) {
            exec(s, f, "FacebookConnectPlugin", "getAccessToken", []);
        },

        logout: function (s, f) {
            exec(s, f, "FacebookConnectPlugin", "logout", []);
        },

        api: function (graphPath, permissions, s, f) {
            if (!permissions) { permissions = []; }
            exec(s, f, "FacebookConnectPlugin", "graphApi", [graphPath, permissions]);
        }
    };

    module.exports = facebookConnectPlugin;
}

 

Şimdi facebook login yapmak ve kullanıcı nın mail adresini , adını , soyadını vs bilgileri alacağımız kod parçasını projeye dahil edelim .

if (!window.cordova) {
    var appId = prompt("facebook app id yazılacak ", "facebook da belirttiğiniz uygulama adınız yazılacak");
    facebookConnectPlugin.browserInit(appId);
                     }
    facebookConnectPlugin.login( ["email"],
    function (response) {  fbgiris ();},
    function (response) {  });
    function fbgiris (){
              facebookConnectPlugin.api( "me/?fields=id,name,email", ["user_birthday","email","public_profile"],
              function (response) { 	   
           var fb_name  =response.name;//Kullanıcı adı
           var fb_email =response.email;// email adresi
           var fb_id    =response.id; //facebook id si
                   },function (response) {}); }

 

Birde fuul çalışan bir kod örneği verelim :
<!DOCTYPE html>

<html>
    <head>
        <meta charset="utf-8" />
        <meta name="format-detection" content="telephone=no" />
        <meta name="viewport" content="user-scalable=no, initial-scale=1, maximum-scale=1, minimum-scale=1, width=device-width, height=device-height, target-densitydpi=medium-dpi" />
        <link rel="stylesheet" type="text/css" href="css/index.css" />
        <title>facebook Login</title>
    </head>
    <body>
        <div class="app">
            <h1>MOBİLMUAYENE.COM</h1>
            <div id="deviceready" class="blink">
                <p class="event listening">cİHAZA BAĞLANIYOR</p>
                <p class="event received">CİHAZ HAZIR</p>
            </div>
            <div class="event listening button" onclick="login();">Login  Facebook</div>
            <div class="event listening button" onclick="showDialog();">facebook ile dialog</div>
            <div class="event listening button" onclick="apiTest();">facebook api testi</div>
            <div class="event listening button" onclick="getAccessToken();">facebook ile kullanıcı bilgileri</div>
            <div class="event listening button" onclick="logPurchase();">Log Purchase Event</div>
            <div class="event listening button" onclick="logEvent();">Log  Event</div>
            <div class="event listening button" onclick="getStatus();">login statü bilgileri</div>
            <div class="event listening button" onclick="logout();">Logout  Facebook</div>
        </div>
        <div id="fb-root"></div>
        <script type="text/javascript" src="cordova.js"></script>
        <script type="text/javascript" src="js/facebookConnectPlugin.js"></script>
        <script type="text/javascript">
            var login = function () {//facebookConnectPlugin.js dosyasını eklemeyi unutmayın
                if (!window.cordova) {
                    var appId = prompt("facebook app id", "uygulama adınız");
                    facebookConnectPlugin.browserInit(appId);
                }
                facebookConnectPlugin.login( ["user_birthday","email","public_profile"],
                    function (response) { alert(JSON.stringify(response)) },
                    function (response) { alert(JSON.stringify(response)) });
            }
            
            var showDialog = function () { 
                facebookConnectPlugin.showDialog( { method: "feed" }, 
                    function (response) { alert(JSON.stringify(response)) },
                    function (response) { alert(JSON.stringify(response)) });
            }
            
            var apiTest = function () { 
                facebookConnectPlugin.api("me/?fields=id,name,picture,email", ["user_birthday","email","public_profile"],
                    function (response) { alert(JSON.stringify(response)) },
                    function (response) { alert(JSON.stringify(response)) }); 
            }
            var logPurchase = function () {
                facebookConnectPlugin.logPurchase(1.99, "USD",
                    function (response) { alert(JSON.stringify(response)) },
                    function (response) { alert(JSON.stringify(response)) });
            }
            var logEvent = function () {
                // Daha fazlası aşağıdaki adreslerder mevcut
                // https://developers.facebook.com/docs/ios/app-events
                // https://developers.facebook.com/docs/android/app-events
                facebookConnectPlugin.logEvent("Purchased",
                    {
                        NumItems: 1,
                        Currency: "USD",
                        ContentType: "shoes",
                        ContentID: "HDFU-8452"
                    }, null,
                    function (response) { alert(JSON.stringify(response)) },
                    function (response) { alert(JSON.stringify(response)) });
            }
            var getAccessToken = function () { 
                facebookConnectPlugin.getAccessToken( 
                    function (response) { alert(JSON.stringify(response)) },
                    function (response) { alert(JSON.stringify(response)) });
            }
            
            var getStatus = function () { 
                facebookConnectPlugin.getLoginStatus( 
                    function (response) { alert(JSON.stringify(response)) },
                    function (response) { alert(JSON.stringify(response)) });
            }
            var logout = function () { 
                facebookConnectPlugin.logout( 
                    function (response) { alert(JSON.stringify(response)) },
                    function (response) { alert(JSON.stringify(response)) });
            }
        </script>
    </body>
</html>