在Phonegap中登录社交

时间:2014-05-27 12:15:22

标签: javascript cordova

我通过Phonegap陷入社交登录(Facebook,Google和Twitter)。 我用Google搜索并找到了很多解决方案,但它们无法在任何平台上运行(即:android或iOS)。 是否有人使用phonegap在他/她的应用程序中实现了社交登录?

如果任何人可以提供正在运行的代码,那将不胜感激。

谢谢, 萨比尔

1 个答案:

答案 0 :(得分:2)

我知道回答你的特定问题可能已经很晚了但是我遇到了同样的问题 - 所有当前(2016年9月)的脚本,片段以及我尝试过的PhoneGap / Cordova社交登录库不行,所以我从头开始做了一些简单的功能,这些功能对于在这里结束的人来说可能仍然有用。您可以使用它们将用户登录到LinkedIn,Facebook和Google(+)。我还做了一些简单的函数,从通过使用给定网络登录用户返回的访问令牌中检索一些基本用户信息。您可以检查这些功能,但它们通常会将令牌或/和用户数据保存到localStorage以供以后使用。它们已于2016年9月进行了测试并且运行良好。我希望这可以帮助那些同时登陆网络失败片段的其他人。

您可以随时插入代码并使用这些功能。它需要jQuery和PhoneGap的InAppBrowser(除了在社交媒体上制作应用程序/客户端以填充app id和app secret)。

作为旁注,将客户机密码直接存储在PhoneGap应用程序中并不是最好的举措,因为恶意的人可以查看来源。

代码可以在很多地方重构,所以请随意这样做,但它可以解决问题。您可能还必须处理用户取消登录过程的情况。



var facebookLogin = function(appId, appSecret, successCb,errCb) {


  /*$.get("https://graph.facebook.com/oauth/access_token?client_id=" + appId + "&client_secret=" +appSecret + "&grant_type=client_credentials", function(res) {
        if (res.indexOf("access_token=") !== -1) {
              successCb(res.replace("access_token=", "").trim());
        }
        else {
          errCb(res);
        }


  })
  */


  var ref = window.open("https://www.facebook.com/dialog/oauth?display=popup&response_type=token&client_id="+appId+"&redirect_uri="+"http://anyurlhere.com", "_blank", "location=no");
  ref.addEventListener("loadstop", function(evt) {


    if (evt.url.indexOf("anyurlhere.com") !== -1) {
      if (evt.url.indexOf("#access_token") !== -1) {
          localStorage.fbToken = evt.url.split("#access_token=")[1];
          ref.close();
          ref.addEventListener("exit", function() {
                successCb(localStorage.fbToken);
          })
      }


    }
  })

}

var linkedinLogin = function(appId,appSecret,successCb,errCb) {

  var ref = window.open("https://www.linkedin.com/oauth/v2/authorization?response_type=code&client_id="+appId+"&redirect_uri="+(encodeURI("http://anyurlhere.com"))+"&state=987654321&scope=r_basicprofile", "_blank", "location=no");
  ref.addEventListener("loadstop", function(evt) {

    if (evt.url.indexOf("anyurlhere.com") !== -1) {
      if (evt.url.indexOf("code=") !== -1) {
        var code = evt.url.split("code=")[1];
        code = code.split("&")[0];

        //TODO:  get actual token to access user profile
        $.post("https://www.linkedin.com/oauth/v2/accessToken", {"grant_type": "authorization_code", "code": code, "redirect_uri":encodeURI("http://anyurlhere.com"), "client_id":appId,"client_secret":appSecret}, function(data) {
          for (key in data) {
            if (key == 'access_token') {

              localStorage.linkedinToken = data[key];
              ref.close();
              ref.addEventListener("exit", function() {
                successCb(localStorage.linkedinToken);
              })
            }


          }
        })

      }

    }
  })

}

var googleLogin = function(appId, appSecret, successCb, errCb) {

  var ref = window.open("https://accounts.google.com/o/oauth2/v2/auth?response_type=token&client_id=" + appId + "&redirect_uri="+encodeURI("http://anyurlhere.com")+"&scope="+encodeURIComponent("email profile")+"&state=profile", "_blank", "location=no");
  ref.addEventListener("loadstop", function(evt) {
    if (evt.url.indexOf("anyurlhere.com") !== -1) {

      if (evt.url.indexOf("access_token=") !== -1) {
        var accessToken = evt.url.split("access_token=")[1];
        accessToken = accessToken.split("&")[0];

        localStorage.gToken = accessToken;

        ref.close();
        ref.addEventListener("exit", function() {
            successCb(localStorage.gToken);
        })
      }
    }
  })

}

var getGoogleInfo = function(successCb, errCb) {
  //get basic user profile
    $.get("https://www.googleapis.com/oauth2/v1/userinfo?alt=json&access_token=" + localStorage.gToken, function(userInfo) {
      successCb(userInfo);
    })
}

var getFacebookInfo = function(successCb, errCb) {
  //get basic user profile-name
  $.get("https://graph.facebook.com/me?fields=email,name,picture&access_token=" + localStorage.fbToken, function(userInfo) {



    var myInfo = {};
    if (userInfo.name) {
          myInfo.name = userInfo.name;
    }
    if (userInfo.email) {
      myInfo.email = userinfo.email;
    }

    if (userInfo.picture) {
      myInfo.picture = userInfo.picture.data.url;
    }

    localStorage.myInfo = JSON.stringify(myInfo);
      successCb(myInfo);
    // localStorage.myInfo = myInfo;
  })
}

//get basic data for linked in

var getLinkedinInfo = function(successCb, errCb) {

  $.ajax({
      url: "https://api.linkedin.com/v1/people/~?format=json",
      headers: {
        "Authorization": "Bearer " + localStorage.linkedinToken
      },
      success: function(userInfo) {



        var myInfo = {};
        if (userInfo.firstName && userInfo.lastName) {
            myInfo.name = userInfo.firstName + " " + userInfo.lastName;

        }
        if (userInfo.headline) {
          myInfo.linkedinHeadline = userInfo.headline;

        }
        localStorage.myInfo = JSON.stringify(myInfo);

        successCb(myInfo);

      },
      fail: function(err) {
        alert(err);
        for (key in err) {
          alert(key);
          alert(err[key]);
        }
      }


  })



}

//example of logging in the user with Google + and getting his/her data

googleLogin("93-54932-423-fkfew.apps.googleusercontent.com", "", function(accessToken) {
        getGoogleInfo(function(userInfo) {

          var myInfo = {};
          alert(userInfo.name);
          if (userInfo.email) {
                    myInfo.email = userInfo.email;
          }
          if (userInfo.name) {
              myInfo.name = userInfo.name;
          }
          if (userInfo.given_name) {
              myInfo.firstName = userInfo.given_name;
          }
          if (userInfo.familyName) {
                      myInfo.familyName = userInfo.family_name;
          }
          if (userInfo.picture) {
                      myInfo.picture = userInfo.picture;
          }