android - Cordova 4.1.2 推特整合

标签 android ios cordova twitter plugins

如何为 cordova 4.1.2 集成 Twitter 登录,因为现在 childBrowser 已弃用,我们无法使用 this演示。 任何人都可以帮助我吗??

最佳答案

经过 2 天的研究,我终于得到了这个解决方案。 1)你需要安装inappbrowser插件。 2) 以下是我使用 Twitter 登录的 index.html

<html>
<head>
    <meta charset="utf-8" />
    <meta name="format-detection" content="telephone=no" />
    <meta name="msapplication-tap-highlight" content="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=device-dpi" />
    <link rel="stylesheet" type="text/css" href="css/index.css" />
    <title>Hello World</title>
    <script type="text/javascript" src="cordova.js"></script>
    <script type="text/javascript" charset="utf-8" src="js/codebird.js"></script>
    <script type="text/javascript" charset="utf-8" src="js/jquery-1.11.2.min.js"></script>
    <script type="text/javascript" charset="utf-8" src="js/jsOAuth-1.3.6.js"></script>
    <script type="text/javascript" charset="utf-8">
        window.onerror = function(error, url, line) {
            alert(error + '  on line : ' + line + ' -- ' + url);
        };

        function onBodyLoad(){
            alert("bodyLoad");
                document.addEventListener("deviceready", onDeviceReady, false);
        }

        function onDeviceReady() {
            alert("device ready");
            var root = this;
            /*cb=window.open();
            if(!localStorage.getItem(twitterKey)){
                    $("#loginBtn").show();
                    $("#logoutBtn").hide();
            }
            else {
                $("#loginBtn").hide();
                $("#logoutBtn").show();
            }

            if (cb != null) {
                cb.onLocationChange = function(loc){ root.locChanged(loc); };
                cb.onClose = function(){root.onCloseBrowser()};
                cb.onOpenExternal = function(){root.onOpenExternal();};
            }*/
        }

        function onCloseBrowser() {
            console.log("onCloseBrowser!");
        }

        function locChanged(loc) {
            console.log("locChanged!");
        }

        function onOpenExternal() {
            console.log("onOpenExternal!");
        }
    </script>
    <script>
                // GLOBAL VARS
        var oauth; // It Holds the oAuth data request
        var requestParams; // Specific param related to request
        var options = {
            consumerKey: 'consumer_key', // YOUR Twitter CONSUMER_KEY
            consumerSecret: 'customer_secret', // YOUR Twitter CONSUMER_SECRET
            callbackUrl: "http://www.example.com/" }; // YOU have to replace it on one more Place                   
        var twitterKey = "twtrKey"; // This key is used for storing Information related

        var Twitter = {
        init:function(){


                // we have no data for save user
                oauth = OAuth(options);
                oauth.get('https://api.twitter.com/oauth/request_token',
                          function(data) {
                          requestParams = data.text;
                          cb=window.open('https://api.twitter.com/oauth/authorize?'+data.text,'_blank', 'location=no'); // This opens the Twitter authorization / sign in page
                          cb.addEventListener('loadstop', function(loc){//alert('stop: ' + loc.url);
                                              Twitter.success(loc);
                                              });
                          },
                          function(data) {
                          console.log("ERROR: "+data);
                          }
                          );

        },
        success:function(loc){
            if (loc.url.indexOf("http://www.example.com/?") >-1) 
            {
                // Parse the returned URL
                var index, verifier = '';
                var params = loc.url.substr(loc.url.indexOf('?') + 1);

                params = params.split('&');
                for (var i = 0; i < params.length; i++) {
                    var y = params[i].split('=');
                    if(y[0] === 'oauth_verifier') {
                        verifier = y[1];
                    }
                }
                oauth.get('https://api.twitter.com/oauth/access_token?oauth_verifier='+verifier+'&'+requestParams,
                          function(data) {
                          var accessParams = {};
                          var qvars_tmp = data.text.split('&');
                          for (var i = 0; i < qvars_tmp.length; i++) {
                          var y = qvars_tmp[i].split('=');
                          accessParams[y[0]] = decodeURIComponent(y[1]);
                          }
                          // alert(verifier)

                          $('#oauthStatus').html('<span style="color:green;">Success!</span>');
                          $('#stage-auth').hide();
                          $('#stage-data').show();
                          oauth.setAccessToken([accessParams.oauth_token, accessParams.oauth_token_secret]);

                          // Saving token of access in Local_Storage
                          var accessData = {};
                          accessData.accessTokenKey = accessParams.oauth_token;
                          accessData.accessTokenSecret = accessParams.oauth_token_secret;

                          // Configuring Apps LOCAL_STORAGE
                          console.log("TWITTER: Storing token key/secret in localStorage");

                          oauth.get('https://api.twitter.com/1.1/account/verify_credentials.json?skip_status=true',
                                    function(data) {
                                    // alert('key'+twitterKey);
                                    var entry = JSON.parse(data.text);
                                    console.log("TWITTER USER: "+entry.screen_name);
                                    $("#welcome").show();
                                    document.getElementById("welcome").innerHTML="welcome " + entry.screen_name;
                                    successfulLogin();
                                    alert("login success");
                                    },
                                    function(data) {
                                        console.log("ERROR: " + data);
                                        alert("error" + data);
                                        }
                                    );

                          // Now we have to close the child browser because everthing goes on track.

                          cb.close();
                          },
                          function(data) {
                         // alert('rr');
                          console.log(data);


                          }
                          );
            }
        },

    }

    function done(){
        $("#tweet").val('');
    }


    function successfulLogin(){
        $("#loginBtn").hide();
        $("#logoutBtn,#tweet,#tweeter,#tweetBtn,#tweetText").show();

    }


            </script>

</head>
<body onload="onBodyLoad()">
    <h4>Oodles Twitter App</h4>

        <table border="1">
    <tr>
        <th>Login using Twitter</th>
        <th>
            <button id="loginBtn" onclick="Twitter.init()">Login</button>
        </th>
    </tr>
    <tr><td colspan="2"><div id="welcome">Please Login to use this app</div></td></tr>
</table>
</body>

关于android - Cordova 4.1.2 推特整合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30098467/

相关文章:

java - 将 Google+ 个人资料图片从 Uri 获取到 Android 上的位图

ios - 分配一个枚举器,它与变量相反

javascript - PhoneGap Media Plugin - 你能检测到 url 流何时加载吗?

android - 在 Android 2.x 中使用 Apache Cordova/PhoneGap

android - achartengine 演示,没有 R 文件的痕迹

java - 无法写入连接到 URLConnection 的 BufferedOutputStream

android - 包含多个 TextView 的自定义 UI 元素

android - 未满足的对等依赖 React Native CLI Init

ios - 将 JSON 响应提取到 UITableview 的属性列表中

javascript - 清除 ios 上的 UIWebView 缓存