No, non è necessario alcun back-end per questo scopo. Ogni utente autenticato può avere il proprio stream nell'app stessa. Di seguito è riportato lo snippet di codice che sto utilizzando nella mia applicazione.
Suppongo che l'utente stia seguendo tali utenti. Se non stanno seguendo, non riceveranno alcun tweet da loro nel loro stream.
Nel caso in cui si desidera che i tweet di determinati utenti vengano recapitati a tutti, indipendentemente dal fatto che seguano o meno determinati utenti, sarà necessario aprire un flusso pubblico. Questo non può essere fatto nell'app stessa e quindi avrai bisogno di back-end in quel caso. In tal caso, deve essere aperta una sola istanza di stream e ogni volta che arriva un tweet da quegli utenti, quel tweet deve essere notificato a ciascun utente della tua app.
Spero di essere chiaro con la mia spiegazione.
In questo codice è sufficiente filtrare i tweet per gli utenti selezionati.
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);
}
};
Sì, questo avrebbe bisogno di comunicare a tutti gli utenti di app di nuovi tweet da utenti specifici, indipendentemente se l'utente app li sta seguendo o no. – Orbit
Quindi hai bisogno di un back-end. Perché quegli utenti non riceveranno tweet se non stanno seguendo quegli utenti. Dovrai ottenere tutti i tweet nel tuo server di back-end utilizzando lo streaming e su ogni tweet pertinente notificherà a tutti gli utenti che utilizzano i messaggi push. – sahu