如何在 AngularJS/Ionic 应用程序中为 android 添加 Twitter 提要

How to add twitter feed in AngularJS / Ionic apps for android

我已经使用示例代码在我的应用程序中添加来自以下 link 的 Twitter 提要 https://github.com/bradleyprice/ionic_twitterfeed but I got token null, so nothing to show in my app just refreshing screen.After that i refer blog http://blog.ionic.io/displaying-the-twitter-feed-within-your-ionic-app/ 它也给我同样的结果。 请建议我更改或任何其他 link 我可以获得最佳解决方案的地方。

部分代码如下,在index.html

      <!-- ionic/angularjs js -->
        <script src="lib/ionic/js/ionic.bundle.js"></script>

        <!-- cordova script (this will be a 404 during development) -->
        <script src="lib/sha.js"></script>
        <script src="lib/angular-resource/angular-resource.js"></script>
        <script src="lib/ngCordova/dist/ng-cordova.js"></script>
        <script src="js/ng-cordova-oauth.js"></script>

        <!-- your app's js -->
        <script src="js/app.js"></script>
        <script src="js/controllers.js"></script>
        <script src="js/services.js"></script>
      </head>
      <body ng-app="starter" ng-controller="AppCtrl">

app.js

        angular.module('starter', ['ionic', 'ngResource', 'ngCordova'])

        .run(function($ionicPlatform) {
          $ionicPlatform.ready(function() {
            // Hide the accessory bar by default (remove this to show the accessory bar above the keyboard
            // for form inputs)
            if(window.cordova && window.cordova.plugins.Keyboard) {
              cordova.plugins.Keyboard.hideKeyboardAccessoryBar(true);
            }
            if(window.StatusBar) {
              StatusBar.styleDefault();
            }
          });
        });

controllers.js

        angular.module('starter').controller('AppCtrl', function($scope, $ionicPlatform, $ionicPopup, TwitterService) {
            // Should we show the post tweet button
            $scope.showUpdateStatus = true;
            // 1
            $scope.correctTimestring = function(string) {
                return new Date(Date.parse(string));
            };
            // 2
            $scope.showHomeTimeline = function() {
                alert("1");
                TwitterService.getHomeTimeline().then(function(res) {
                    alert("home_timeline");
                  $scope.home_timeline = res;
                }, function(req) {
                  console.log(req);
                });
            };
            // 3
            $scope.doRefresh = function() {
                $scope.showHomeTimeline();
                $scope.$broadcast('scroll.refreshComplete');
            };
            $scope.updateStatus = function() {
                TwitterService.updateStatus().then(function(res) {
                  $scope.showUpdateStatus = false;
                  $scope.doRefresh();
                }, function(req) {
                  console.log(req);
                });
            }
            // 4
            $ionicPlatform.ready(function() {
                if (TwitterService.isAuthenticated()) {
                    $scope.showHomeTimeline();
                } else {
                    TwitterService.initialize().then(function(result) {
                        if(result === true) {
                            $scope.showHomeTimeline();
                        }
                    });
                }
            });
        });

services.js

            angular.module('starter',['ionic', 'ngCordovaOauth']).factory('TwitterService', function($cordovaOauth, $cordovaOauthUtility, $http, $resource, $q) {
                // 1
                var twitterKey = "";
                var clientId = '';
                var clientSecret = '';

                // 2
                function storeUserToken(data) {
                    window.localStorage.setItem(twitterKey, JSON.stringify(data));
                }

                function getStoredToken() {
                    return window.localStorage.getItem(twitterKey);
                }

                // 3
                function createTwitterSignature(method, url) {
                    var token = angular.fromJson(getStoredToken());
                    var oauthObject = {
                        oauth_consumer_key: clientId,
                        oauth_nonce: $cordovaOauthUtility.createNonce(32),
                        oauth_signature_method: "HMAC-SHA1",
                        oauth_timestamp: Math.round((new Date()).getTime() / 1000.0),
                        oauth_token: token.oauth_token,
                        oauth_version: "1.0"
                    };
                    var signatureObj = $cordovaOauthUtility.createSignature(method, url, oauthObject, {}, clientSecret, token.oauth_token_secret);
                    $http.defaults.headers.common.Authorization = signatureObj.authorization_header;
                }

                function createTwitterPostSignature(method, url, message) {
                    var token = angular.fromJson(getStoredToken());
                    var oauthObject = {
                        oauth_consumer_key: clientId,
                        oauth_nonce: $cordovaOauthUtility.createNonce(32),
                        oauth_signature_method: "HMAC-SHA1",
                        oauth_timestamp: Math.round((new Date()).getTime() / 1000.0),
                        oauth_token: token.oauth_token,
                        oauth_version: "1.0",
                        status: message
                    };
                    var signatureObj = $cordovaOauthUtility.createSignature(method, url, oauthObject, oauthObject, clientSecret, token.oauth_token_secret);
                    $http.defaults.headers.common.Authorization = signatureObj.authorization_header;
                }

                return {
                    // 4
                    initialize: function() {
                        var deferred = $q.defer();
                        var token = getStoredToken();
                        alert(token);
                        if (token !== null) {
                            deferred.resolve(true);
                        } else {
                            $cordovaOauth.twitter(clientId, clientSecret).then(function(result) {
                                storeUserToken(result);
                                deferred.resolve(true);
                            }, function(error) {
                                deferred.reject(false);
                            });
                        }
                        return deferred.promise;
                    },
                    // 5
                    isAuthenticated: function() {
                        return getStoredToken() !== null;
                    },
                    // 6
                    getHomeTimeline: function() {
                        var home_tl_url = 'https://api.twitter.com/1.1/statuses/home_timeline.json';
                        createTwitterSignature('GET', home_tl_url);
                        return $resource(home_tl_url).query().$promise;
                    },
                    updateStatus: function() {
                        var message = "test from ionic";
                        var update_url = 'https://api.twitter.com/1.1/statuses/update.json';
                        var results = createTwitterPostSignature('POST', update_url, message);
                        return $resource(update_url, {'status': message}).save().$promise;
                    },
                    storeUserToken: storeUserToken,
                    getStoredToken: getStoredToken,
                    createTwitterSignature: createTwitterSignature,
                    createTwitterPostSignature: createTwitterPostSignature
                };
            })

可能值得在 Github
上查看此示例 https://github.com/bradleyprice/ionic_twitterfeed