Android 使用Twitter流式API

Android 使用Twitter流式API,android,twitter,twitter4j,Android,Twitter,Twitter4j,我需要实时通知我的应用程序来自选定的几个用户的新推文。好了,要做到这一点,我需要使用Twitter流API。我遇到过Twitter4J,但我不太确定如何在流式API中使用它。有人知道关于使用这个的任何具体的最新例子吗 此外,我在流式API文档中也遇到了这个问题: 每个帐户只能创建一个到公共端点的固定连接,并且使用相同的帐户凭据多次连接到公共流将导致断开最早的连接。 进行过多连接尝试(成功和失败)的客户端可能会面临IP自动被禁止的风险 当收到新推文时,该应用程序将需要为所有用户更新。这会违反这条规

我需要实时通知我的应用程序来自选定的几个用户的新推文。好了,要做到这一点,我需要使用Twitter流API。我遇到过Twitter4J,但我不太确定如何在流式API中使用它。有人知道关于使用这个的任何具体的最新例子吗

此外,我在流式API文档中也遇到了这个问题:

每个帐户只能创建一个到公共端点的固定连接,并且使用相同的帐户凭据多次连接到公共流将导致断开最早的连接。 进行过多连接尝试(成功和失败)的客户端可能会面临IP自动被禁止的风险


当收到新推文时,该应用程序将需要为所有用户更新。这会违反这条规则吗?我需要创建一个后端来接收流,然后从那里推送新的推文吗?

你确实需要一个后端,我建议创建一个PHP文件(尽管你喜欢的任何语言都可以提供),连接到流API,并在每一篇新帖子上向应用程序的所有用户发送一条谷歌云消息。 在android应用程序中,您可以实现一个广播接收器,用于处理GCM消息,该消息应至少包含推文链接,但可以包含完整的推文内容

如果没有像服务器那样的单一连接点,您可能会如您所建议的那样破坏流式API规则,更糟糕的是,一次只有一个用户拥有可靠的连接


希望这能有所帮助。

不,您不需要任何后端。每个经过身份验证的用户都可以在应用程序中拥有自己的流。下面是我在自己的应用程序中使用的代码片段

我假设用户正在跟踪这些用户。如果他们没有关注,那么他们就不会在他们的推特流中收到任何推特

如果你想让某些用户的推文传递给所有人,而不管他们是否在跟踪这些用户,那么你就必须打开一个公共流。这不能在应用程序本身中完成,因此在这种情况下,您将需要后端。在这种情况下,只需打开流的一个实例,并且每当来自这些特定用户的tweet到达时,该tweet必须通知应用程序的每个用户

我希望我的解释清楚

在这段代码中,您只需过滤这些选定用户的tweet

    ConfigurationBuilder config = new ConfigurationBuilder();
    config.setJSONStoreEnabled(true);
    config.setOAuthConsumerKey(Keys.TWITTER_KEY);
    config.setOAuthConsumerSecret(Keys.TWITTER_SECRET);
    config.setOAuthAccessToken(HelperFunctions.currentSession.getAuthToken().token);
    config.setOAuthAccessTokenSecret(HelperFunctions.currentSession.getAuthToken().secret);

    Configuration cf = config.build();
    HelperFunctions.twitter = new TwitterFactory(cf).getInstance();

    HelperFunctions.twitterStream = new TwitterStreamFactory(cf).getInstance();
    HelperFunctions.twitterStream.addListener(listener);
    // user() method internally creates a thread which manipulates TwitterStream and calls these adequate listener methods continuously.
    HelperFunctions.twitterStream.user();







private static final UserStreamListener listener = new UserStreamListener() {
    @Override
    public void onStatus(Status status) {
        // Filter your selected users here
        System.out.println("onStatus @" + status.getUser().getScreenName() + " - " + status.getText());
    }

    @Override
    public void onFriendList(long[] friendIds) {
    }

    @Override
    public void onFavorite(User source, User target, Status favoritedStatus) {
    }

    @Override
    public void onUnfavorite(User source, User target, Status unfavoritedStatus) {

    }

    @Override
    public void onFollow(User source, User followedUser) {
    }

    @Override
    public void onUnfollow(User source, User unfollowedUser) {
    }

    @Override
    public void onDirectMessage(DirectMessage directMessage) {
    }

    @Override
    public void onUserListMemberAddition(User addedMember, User listOwner, UserList list) {
    }

    @Override
    public void onUserListMemberDeletion(User deletedMember, User listOwner, UserList list) {
    }

    @Override
    public void onUserListSubscription(User subscriber, User listOwner, UserList list) {
    }

    @Override
    public void onUserListUnsubscription(User subscriber, User listOwner, UserList list) {
    }

    @Override
    public void onUserListCreation(User listOwner, UserList list) {
    }

    @Override
    public void onUserListUpdate(User listOwner, UserList list) {
    }

    @Override
    public void onUserListDeletion(User listOwner, UserList list) {
    }

    @Override
    public void onUserProfileUpdate(User updatedUser) {
    }

    @Override
    public void onBlock(User source, User blockedUser) {
    }

    @Override
    public void onUnblock(User source, User unblockedUser) {
    }

    @Override
    public void onException(Exception ex) {
    }

    @Override
    public void onDeletionNotice(StatusDeletionNotice statusDeletionNotice) {
        System.out.println("Got a status deletion notice id:" + statusDeletionNotice.getStatusId());
    }

    @Override
    public void onDeletionNotice(long directMessageId, long userId) {
        System.out.println("Got a direct message deletion notice id:" + directMessageId);
    }

    @Override
    public void onTrackLimitationNotice(int numberOfLimitedStatuses) {
        System.out.println("Got a track limitation notice:" + numberOfLimitedStatuses);
    }

    @Override
    public void onScrubGeo(long userId, long upToStatusId) {
        System.out.println("Got scrub_geo event userId:" + userId + " upToStatusId:" + upToStatusId);
    }

    @Override
    public void onStallWarning(StallWarning warning) {
        System.out.println("Got stall warning:" + warning);
    }
};

是的,这将需要通知所有应用程序用户来自特定用户的新推文,无论应用程序用户是否在跟踪他们。然后,您需要一个后端。因为如果这些用户不关注这些用户,他们将不会收到推文。您必须使用流媒体获取后端服务器中的所有推文,并在每个相关推文上使用推送消息通知所有用户。