{"id":5491,"date":"2015-09-16T06:00:44","date_gmt":"2015-09-16T13:00:44","guid":{"rendered":"http:\/\/thinkapps.com\/blog\/?p=5491"},"modified":"2015-09-18T12:53:07","modified_gmt":"2015-09-18T19:53:07","slug":"activity-stream-news-feed-complete-guide","status":"publish","type":"post","link":"https:\/\/thinkapps.com\/blog\/development\/activity-stream-news-feed-complete-guide\/","title":{"rendered":"The Essential Guide to Building an Activity Stream into Your App"},"content":{"rendered":"<p><i>This post is part of our<i>\u00a0<span style=\"text-decoration: underline;\"><i><a title=\"Building Blocks series\" href=\"http:\/\/thinkapps.com\/blog\/tag\/building-blocks\/\" target=\"_blank\">Building Blocks series<\/a><\/i><\/span><\/i>, which provides comprehensive guides on common features of web and mobile apps. We&#8217;ve explored\u00a0<span style=\"text-decoration: underline;\"><a title=\"A Comprehensive Guide to Building Chat into Your Web or Mobile App\" href=\"http:\/\/thinkapps.com\/blog\/development\/how-to-build-chat-into-app\/\" target=\"_blank\">chat<\/a><\/span>,\u00a0<span style=\"text-decoration: underline;\"><a title=\"The Definitive Guide to Adding Payments to Your Web or Mobile App\" href=\"http:\/\/thinkapps.com\/blog\/development\/payments-app-definitive-guide\/\" target=\"_blank\">payments<\/a><\/span>, and\u00a0<span style=\"text-decoration: underline;\"><a title=\"Native Advertising: A Complete Guide to Adding This Revenue Stream to Your App\" href=\"http:\/\/thinkapps.com\/blog\/development\/native-advertising-app-complete-guide\/\" target=\"_blank\">native advertising<\/a><\/span>. Now we\u2019re tackling the strategy and functionality of activity streams.<\/i><\/p>\n<p>The functionality of newsfeeds (a.k.a. activity streams) is perfect for passive scrollers, i.e. nearly\u00a0all\u00a0smartphone users and many web users.<\/p>\n<p>With an activity stream in your app, you can prioritize the newest and\/or most relevant information to the top of users\u2019 feeds, so they don\u2019t have to make many decisions. They inherently understand how it works, no matter what the platform or device.<\/p>\n<p><span style=\"font-weight: 400;\">With each visit to a feed-based app, users are guaranteed new posts, and it keeps them coming back <a title=\"Email Marketing Tips: How to Build Loyalty with Subscribers\" href=\"http:\/\/thinkapps.com\/blog\/launch\/email-marketing-tips\/\" target=\"_blank\">over and over<\/a> again. They can\u2019t help but wonder \u201cWhat have I missed?\u201d (When building an app, <\/span><a title=\"FOMO definition\" href=\"http:\/\/www.urbandictionary.com\/define.php?term=fomo\" target=\"_blank\"><span style=\"font-weight: 400;\">FOMO<\/span><\/a><span style=\"font-weight: 400;\"> can be your best friend.)<\/span><\/p>\n<p>Whether it\u2019s breaking news or instant pictures, activity streams have gone far beyond the world of social apps. By exploring\u00a0the full scope of what\u2019s possible, we&#8217;re uncovering\u00a0all the perks of feed functionality.<\/p>\n<h2>Outline<\/h2>\n<p>Our goal was to make this guide\u00a0comprehensive. Unfortunately that means it can be a little challenging to navigate.<\/p>\n<p>To make the guide more reader-friendly, here is an outline of the various sections. You can jump to a specific spot\u00a0simply by clicking the link below.<\/p>\n<ol>\n<li><a title=\"4 Ways to Organize Your App's Activity Stream\" href=\"#ways-to-organize-activity-stream\">4 Ways to Organize Your App&#8217;s Activity Stream<\/a>\n<ol>\n<li><a title=\"By Date and Time (Twitter, Instagram)\" href=\"#by-date-and-time\">By Date and Time (Twitter, Instagram)<\/a><\/li>\n<li><a title=\"By Location (Google Now, Spayce)\" href=\"#by-location\">By Location (Google Now, Spayce)<\/a><\/li>\n<li><a title=\"By Social Relevance (Facebook, Reddit, Product Hunt)\" href=\"#by-social-relevance\">By Social Relevance (Facebook, Reddit, Product Hunt)<\/a><\/li>\n<li><a title=\"By Topic (Circa, Spotify)\" href=\"#by-topic\">By Topic (Circa, Spotify)<\/a><\/li>\n<\/ol>\n<\/li>\n<li><a title=\"Design Details\" href=\"#design-details\">Design Details<\/a> (which explains various design elements to keep in mind when designing your activity stream)\n<ol>\n<li><a title=\"Why Are You Showing This Post?\" href=\"#why-this-post\">Why Are You Showing This Post?<\/a><\/li>\n<li><a title=\"Discovery = Engagement\" href=\"#discovery-equals-engagement\">Discovery = Engagement<\/a><\/li>\n<li><a title=\"Offer Some Options\" href=\"#offer-some-options\">Offer Some Options<\/a><\/li>\n<li><a title=\"Keep It Clean\" href=\"#keep-it-clean\">Keep It Clean<\/a><\/li>\n<li><a title=\"One-Tap Actions\" href=\"#one-tap-actions\">One-Tap Actions<\/a><\/li>\n<li><a title=\"Think About Your Refresh\" href=\"#think-about-your-refresh\">Think About Your Refresh<\/a><\/li>\n<\/ol>\n<\/li>\n<li><a title=\"Services That Can\u00a0Help You Create Your Activity Stream\" href=\"#building-activity-stream-newsfeed\">Services That Can\u00a0Help You Create Your Activity Stream<\/a> (don&#8217;t waste resources by reinventing the wheel)\n<ol>\n<li><a title=\"Stream\" href=\"#stream\">Stream<\/a><\/li>\n<li><a title=\"AppBoy\" href=\"#app-boy\">AppBoy<\/a><\/li>\n<li><a title=\"Gigya\" href=\"#gigya\">Gigya<\/a><\/li>\n<\/ol>\n<\/li>\n<li><a title=\"Concluding Thoughts\" href=\"#concluding-thoughts\">Concluding Thoughts<\/a><\/li>\n<\/ol>\n<h2><a id=\"ways-to-organize-activity-stream\"><\/a>4 Ways to Organize Your App&#8217;s\u00a0Activity Stream<\/h2>\n<p><span style=\"font-weight: 400;\">What you show your user first is essentially your entire justification of adding an activity stream\u00a0to your web or mobile app. It\u2019s the feeling of relevance that trumps all when it comes to your user having an intuitive, immersive experience in their feed. <\/span><\/p>\n<p><span style=\"font-weight: 400;\">You can prioritize and curate based on all kinds of factors (as described in\u00a0<\/span><a title=\"64 Ways To Think About a News Homepage\" href=\"https:\/\/medium.com\/thelist\/64-ways-to-think-about-a-news-homepage-223c01952d26\" target=\"_blank\"><span style=\"font-weight: 400;\">this hefty post by Melody Kramer<\/span><\/a><span style=\"font-weight: 400;\">). <\/span><\/p>\n<p><strong>Here are some of the most common approaches to activity streams and the pros and cons of each.<\/strong><\/p>\n<p><a href=\"http:\/\/d1vqbpto5tbbz0.cloudfront.net\/blog\/wp-content\/uploads\/2015\/09\/11155256\/Twitter-Intsa.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"855\" class=\"alignnone wp-image-5500 size-large\" src=\"http:\/\/d1vqbpto5tbbz0.cloudfront.net\/blog\/wp-content\/uploads\/2015\/09\/11155256\/Twitter-Intsa-1024x855.png\" alt=\"Activity Stream - Chronological-feed-Twitter-Instagram\" srcset=\"https:\/\/d1vqbpto5tbbz0.cloudfront.net\/blog\/wp-content\/uploads\/2015\/09\/11155256\/Twitter-Intsa.png 1024w, https:\/\/d1vqbpto5tbbz0.cloudfront.net\/blog\/wp-content\/uploads\/2015\/09\/11155256\/Twitter-Intsa.png 300w, https:\/\/d1vqbpto5tbbz0.cloudfront.net\/blog\/wp-content\/uploads\/2015\/09\/11155256\/Twitter-Intsa.png 1200w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/a><\/p>\n<h2><a id=\"by-date-and-time\"><\/a>1. By Date and Time (Twitter, Instagram)<\/h2>\n<p><span style=\"font-weight: 400;\">This is the classic timeline, with the most recent information at the top and (probably) an endless scroll into the past. <\/span><\/p>\n<h3>Pros<\/h3>\n<p><span style=\"font-weight: 400;\">Time-based filtering is great for in-the-moment relevance. When following a major event on Twitter, for example, users are able to track breaking news as it unfolds or the <a title=\"watchOS 2 for Apple Watch Is Announced\" href=\"http:\/\/thinkapps.com\/blog\/development\/apple-watch-guide-watchos-2\/\" target=\"_blank\">latest Apple event<\/a> as it\u2019s live tweeted. <\/span><\/p>\n<p><span style=\"font-weight: 400;\">It\u2019s a way to make users feel\u00a0like they\u2019re not only up to date, but closer to the action.<\/span><\/p>\n<h3>Cons<\/h3>\n<p><span style=\"font-weight: 400;\">What if users are not in the moment? Imagine them coming back from morning meetings to find thousands of <a title=\"Apple Event stream\" href=\"https:\/\/twitter.com\/search?q=%23AppleEvent&amp;src=tyah\" target=\"_blank\">#AppleEvent<\/a> tweets stacked up, leaving them\u00a0feeling totally left out. <\/span><\/p>\n<p><span style=\"font-weight: 400;\">Twitter helped alleviate FOMO fears by adding the &#8220;<\/span><span style=\"font-weight: 400;\"><a title=\"Twitter &quot;While You Were Away&quot; feature\" href=\"https:\/\/blog.twitter.com\/2015\/while-you-were-away-0\" target=\"_blank\">While you were away<\/a>&#8221; function this year<\/span><span style=\"font-weight: 400;\">. <\/span><\/p>\n<p><span style=\"font-weight: 400;\">When a user hasn\u2019t checked Twitter in awhile, an algorithm bumps the most important things to the top under the headline \u201cWhile you were away.\u201d This type of functionality may be worth considering if you have a time-based feed.<\/span><\/p>\n<p><span style=\"font-weight: 400;\"><a href=\"http:\/\/d1vqbpto5tbbz0.cloudfront.net\/blog\/wp-content\/uploads\/2015\/09\/11155252\/now-spayce.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"855\" class=\"alignnone wp-image-5499 size-large\" src=\"http:\/\/d1vqbpto5tbbz0.cloudfront.net\/blog\/wp-content\/uploads\/2015\/09\/11155252\/now-spayce-1024x855.png\" alt=\"Activity Stream - location-based-app-google-now-spayce\" srcset=\"https:\/\/d1vqbpto5tbbz0.cloudfront.net\/blog\/wp-content\/uploads\/2015\/09\/11155252\/now-spayce.png 1024w, https:\/\/d1vqbpto5tbbz0.cloudfront.net\/blog\/wp-content\/uploads\/2015\/09\/11155252\/now-spayce.png 300w, https:\/\/d1vqbpto5tbbz0.cloudfront.net\/blog\/wp-content\/uploads\/2015\/09\/11155252\/now-spayce.png 1200w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/a><\/span><\/p>\n<h2><a id=\"by-location\"><\/a>2. By Location (Google Now, Spayce)<\/h2>\n<p><span style=\"font-weight: 400;\">One of the best features of <a title=\"Google Now\" href=\"https:\/\/www.google.com\/landing\/now\/\" target=\"_blank\">Google Now<\/a> is its location functionality. <\/span><\/p>\n<p><span style=\"font-weight: 400;\">If you\u2019re not familiar, Google Now is an Android launcher\u00a0that features a feed of cards related to you: weather, sports, calendar, etc. Where it gets really intuitive (some might call it creepy) is when you\u2019re near a movie theater or shopping center, it will give you details on those locations: upcoming showtimes, store hours, etc. <\/span><\/p>\n<p><a title=\"Spayce home\" href=\"http:\/\/www.spayce.me\/\" target=\"_blank\"><span style=\"font-weight: 400;\">Spayce<\/span><\/a><span style=\"font-weight: 400;\"> is another location-based feed, but of a more social nature. You can view and <a title=\"Creating Customer Evangelists: Our Top 4 Strategies\" href=\"http:\/\/thinkapps.com\/blog\/post-launch\/creating-customer-evangelists\/\" target=\"_blank\">engage with people<\/a> who are around you to discover new people and places in a way that has nothing to do with who you know, but instead just where you are. <\/span><\/p>\n<h3>Pros<\/h3>\n<p><span style=\"font-weight: 400;\"> A location-based feed is a way for your user to feel totally immersed in where they are at the moment. <\/span><\/p>\n<p><span style=\"font-weight: 400;\">Whether they\u2019re getting information from other people or your algorithm, you can enhance a place they\u2019re in physically with digital components.<\/span><\/p>\n<h3>Cons<\/h3>\n<p><span style=\"font-weight: 400;\">It needs to work. This seems obvious, but for a location-based app to come in handy it has to be helpful and engaging right when (and where) users\u00a0need it. <\/span><\/p>\n<p><span style=\"font-weight: 400;\">If you have a social location app, this engagement rests mostly with the community. If you\u2019re using an algorithm, this means deciding what about the user&#8217;s\u00a0current location requires further engagement.<\/span><\/p>\n<p><a href=\"http:\/\/d1vqbpto5tbbz0.cloudfront.net\/blog\/wp-content\/uploads\/2015\/09\/11155249\/ph.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"855\" class=\"alignnone wp-image-5498 size-large\" src=\"http:\/\/d1vqbpto5tbbz0.cloudfront.net\/blog\/wp-content\/uploads\/2015\/09\/11155249\/ph-1024x855.png\" alt=\"Activity Stream - producthunt-popularity-feed\" srcset=\"https:\/\/d1vqbpto5tbbz0.cloudfront.net\/blog\/wp-content\/uploads\/2015\/09\/11155249\/ph.png 1024w, https:\/\/d1vqbpto5tbbz0.cloudfront.net\/blog\/wp-content\/uploads\/2015\/09\/11155249\/ph.png 300w, https:\/\/d1vqbpto5tbbz0.cloudfront.net\/blog\/wp-content\/uploads\/2015\/09\/11155249\/ph.png 1200w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/a><\/p>\n<h2><a id=\"by-social-relevance\"><\/a>3. By Social Relevance (Facebook, Reddit, Product Hunt)<\/h2>\n<p><span style=\"font-weight: 400;\">While Facebook\u2019s feed is somewhat based on time, much of it is fueled by users\u2019 friends and what they like and interact with the most. The same goes for Reddit, with posts getting bumped up in the feed as they receive more thumbs up. <\/span><\/p>\n<p><span style=\"font-weight: 400;\">In the case of social platforms, this kind of popularity contest can be great\u00a0for user relevance. <\/span><\/p>\n<h3>Pros<\/h3>\n<p><span style=\"font-weight: 400;\">Since you\u2019re past the days of picking your friends based on who you sit next to in class, chances are you have something in common with them. So, you\u2019ll enjoy at least some of what they like, post, and comment on. <\/span><\/p>\n<p><span style=\"font-weight: 400;\">Even when polling a vast majority, upvotes save your users the time it takes to find what everyone is talking about on sites like <a title=\"Product Hunt\" href=\"http:\/\/www.producthunt.com\/\" target=\"_blank\">Product Hunt<\/a> and <a title=\"Reddit\" href=\"https:\/\/www.reddit.com\/\" target=\"_blank\">Reddit<\/a>.<\/span><\/p>\n<h3>Cons<\/h3>\n<p><span style=\"font-weight: 400;\">The downfall comes when users don\u2019t actually like what their friends like. <\/span><\/p>\n<p><span style=\"font-weight: 400;\">For apps like Facebook, this can leave them with a feed littered with popular shares that have nothing to do with their specific interests. <\/span><\/p>\n<p><span style=\"font-weight: 400;\">In the case of apps like Product Hunt and Reddit, there\u2019s a chance that something good slips through the cracks on account of a post having bad timing and not getting the likes it needs to be seen.<\/span><\/p>\n<p><span style=\"font-weight: 400;\"><a href=\"http:\/\/d1vqbpto5tbbz0.cloudfront.net\/blog\/wp-content\/uploads\/2015\/09\/11155248\/circa-spotify.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"855\" class=\"alignnone wp-image-5497 size-large\" src=\"http:\/\/d1vqbpto5tbbz0.cloudfront.net\/blog\/wp-content\/uploads\/2015\/09\/11155248\/circa-spotify-1024x855.png\" alt=\"Activity Stream - topic-based-feed-circa-spotify\" srcset=\"https:\/\/d1vqbpto5tbbz0.cloudfront.net\/blog\/wp-content\/uploads\/2015\/09\/11155248\/circa-spotify.png 1024w, https:\/\/d1vqbpto5tbbz0.cloudfront.net\/blog\/wp-content\/uploads\/2015\/09\/11155248\/circa-spotify.png 300w, https:\/\/d1vqbpto5tbbz0.cloudfront.net\/blog\/wp-content\/uploads\/2015\/09\/11155248\/circa-spotify.png 1200w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/a><\/span><\/p>\n<h2><a id=\"by-topic\"><\/a>4. By Topic (Circa, Spotify)<\/h2>\n<p><span style=\"font-weight: 400;\">This is an approach to activity streams that still has a lot of untapped potential. <\/span><\/p>\n<p><span style=\"font-weight: 400;\"><a title=\"Circa News\" href=\"https:\/\/circanews.com\/\" target=\"_blank\">Circa<\/a> was a news app that ran for three years and showed users the full thread of every news story. (Unfortunately, it\u2019s <\/span><a title=\"Circa Farewell\" href=\"https:\/\/medium.com\/circa\/farewell-to-circa-news-7d002150f74b\" target=\"_blank\"><span style=\"font-weight: 400;\">no longer operational<\/span><\/a><span style=\"font-weight: 400;\">.) <\/span><\/p>\n<p><span style=\"font-weight: 400;\">For example, if there was a story posted on the Syrian refugees today, when you clicked on it, it would give you tidbits on previous stories in an entire thread tracking the media\u2019s coverage of the Syrian conflict over time. They shared news stories\u00a0in a way that was easy to digest and respected their medium. <\/span><\/p>\n<p><span style=\"font-weight: 400;\">The only feature close to this one might be a \u201cYou May Like\u201d or \u201cBecause You Liked\u2026\u201d feed in apps like Spotify. The app is predicting that a user&#8217;s interest in one thing might imply that they\u2019re interested in something similar. <\/span><\/p>\n<h3>Pros<\/h3>\n<p><span style=\"font-weight: 400;\">In the case of Circa, users were able to harness\u00a0this feature to trace a topic back in time and uncover some previously unknown\u00a0and interesting content. Newer isn\u2019t always better when trying to provide context. <\/span><\/p>\n<p><span style=\"font-weight: 400;\">For predictive suggestions, you\u2019re showing your user some extra love and attention by giving them more of what you know they enjoy.<\/span><\/p>\n<h3>Cons<\/h3>\n<p><span style=\"font-weight: 400;\">Sometimes people know what they want and like, and they don\u2019t want you telling them or trying to guess what comes next\u00a0\u2014 l<\/span><span style=\"font-weight: 400;\">ike when Pandora plays Jason Mraz on your Sufjan Stevens station.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">You don\u2019t want to throw your users into a \u201cWTF\u201d rage, when all they wanted was what they came for (in this case, a feeling of contemplative melancholy).<\/span><\/p>\n<h2><a id=\"design-details\"><\/a>Design Details<\/h2>\n<p><span style=\"font-weight: 400;\">The feed should be seamless for your user \u2014 not too flashy, with little to no options. <\/span><\/p>\n<p><span style=\"font-weight: 400;\">But, on the backend, you have some important decisions to make.<\/span><\/p>\n<p><a href=\"http:\/\/d1vqbpto5tbbz0.cloudfront.net\/blog\/wp-content\/uploads\/2015\/09\/11155246\/now-twitter.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"855\" class=\"alignnone wp-image-5496 size-large\" src=\"http:\/\/d1vqbpto5tbbz0.cloudfront.net\/blog\/wp-content\/uploads\/2015\/09\/11155246\/now-twitter-1024x855.png\" alt=\"Activity Stream post-validation-twitter-google-now\" srcset=\"https:\/\/d1vqbpto5tbbz0.cloudfront.net\/blog\/wp-content\/uploads\/2015\/09\/11155246\/now-twitter.png 1024w, https:\/\/d1vqbpto5tbbz0.cloudfront.net\/blog\/wp-content\/uploads\/2015\/09\/11155246\/now-twitter.png 300w, https:\/\/d1vqbpto5tbbz0.cloudfront.net\/blog\/wp-content\/uploads\/2015\/09\/11155246\/now-twitter.png 1200w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/a><\/p>\n<h3><a id=\"why-this-post\"><\/a>Why this post?<\/h3>\n<p><span style=\"font-weight: 400;\">At times, it will be\u00a0important to explain to your user why you\u2019re showing them a certain post in their feed. <\/span><\/p>\n<p><span style=\"font-weight: 400;\">For example, when you see an unfamiliar face in your Twitter feed, chances are it\u2019s a retweet (or <a title=\"Native Advertising: A Complete Guide to Adding This Revenue Stream to Your App\" href=\"http:\/\/thinkapps.com\/blog\/development\/native-advertising-app-complete-guide\/\" target=\"_blank\">promoted tweet<\/a>). You need only glance at the top of the tweet to see that someone you know has reposted it.<\/span><\/p>\n<p>This small UI addition lets your user know that everything they\u2019re seeing is intentional and selected by your system or by their own choosing. This is\u00a0a detail that\u2019s important beyond social platforms.<\/p>\n<p>For example, in addition to cards based on location, Google Now also offers cards with recent posts based on topics you\u2019ve searched for or read about. (Yes, I\u2019ve shown an interest in Donald Trump, but I ask you \u2014 who hasn\u2019t?)<\/p>\n<p><a href=\"http:\/\/d1vqbpto5tbbz0.cloudfront.net\/blog\/wp-content\/uploads\/2015\/09\/11155244\/instagram.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"855\" class=\"alignnone wp-image-5495 size-large\" src=\"http:\/\/d1vqbpto5tbbz0.cloudfront.net\/blog\/wp-content\/uploads\/2015\/09\/11155244\/instagram-1024x855.png\" alt=\"Activity Stream Instagram-Discover\" srcset=\"https:\/\/d1vqbpto5tbbz0.cloudfront.net\/blog\/wp-content\/uploads\/2015\/09\/11155244\/instagram.png 1024w, https:\/\/d1vqbpto5tbbz0.cloudfront.net\/blog\/wp-content\/uploads\/2015\/09\/11155244\/instagram.png 300w, https:\/\/d1vqbpto5tbbz0.cloudfront.net\/blog\/wp-content\/uploads\/2015\/09\/11155244\/instagram.png 1200w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/a><\/p>\n<h3><a id=\"discovery-equals-engagement\"><\/a>Discovery = Engagement<\/h3>\n<p><span style=\"font-weight: 400;\">With one of Instagram\u2019s most recent updates, they revamped their \u201cExplore\u201d feature, changing it to \u201cDiscover.\u201d Instead of just showing the posts your friends are giving hearts, it shows you trending tags and curated content\u00a0from their global user base. <\/span><\/p>\n<p><span style=\"font-weight: 400;\">A feature like this can add an extra dimension to a feed that\u2019s feeling a little flat. It encourages your user to follow new people, stories, or topics \u2014 whatever is relevant to your app. <\/span><\/p>\n<p><span style=\"font-weight: 400;\">And most of all, it keeps them engaged.\u00a0<\/span><span style=\"font-weight: 400;\">Newsfeed engagement is based strongly on your user being able to see something new at the top of your app every time they visit it.\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400;\">By finding global trends and curating their own stories, Instagram gives all users a shared thread and a view into something they\u2019ve never seen before. If you can convince your user to view\/follow\/like a new person or thread, they\u2019ll expand their scope of what\u2019s possible within your app. <\/span><\/p>\n<p><a href=\"http:\/\/d1vqbpto5tbbz0.cloudfront.net\/blog\/wp-content\/uploads\/2015\/09\/11155242\/etsy.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"855\" class=\"alignnone wp-image-5494 size-large\" src=\"http:\/\/d1vqbpto5tbbz0.cloudfront.net\/blog\/wp-content\/uploads\/2015\/09\/11155242\/etsy-1024x855.png\" alt=\"Activity Stream etsy-local-feature\" srcset=\"https:\/\/d1vqbpto5tbbz0.cloudfront.net\/blog\/wp-content\/uploads\/2015\/09\/11155242\/etsy.png 1024w, https:\/\/d1vqbpto5tbbz0.cloudfront.net\/blog\/wp-content\/uploads\/2015\/09\/11155242\/etsy.png 300w, https:\/\/d1vqbpto5tbbz0.cloudfront.net\/blog\/wp-content\/uploads\/2015\/09\/11155242\/etsy.png 1200w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/a><\/p>\n<h3><a id=\"offer-some-options\"><\/a>Offer Some Options<\/h3>\n<p><span style=\"font-weight: 400;\">Once\u00a0you\u2019ve <a title=\"5 Post-Launch Steps to Make Your App Successful\" href=\"http:\/\/thinkapps.com\/blog\/post-launch\/5-steps-to-make-your-app-successful\/\" target=\"_blank\">got your footing<\/a> in the feed world, it may be time to go horizontal. <\/span><\/p>\n<p><span style=\"font-weight: 400;\">Offering your users additional, pre-determined feeds based on different filters is a clever approach to prolong engagement in a way that\u2019s more guided than Instagram\u2019s Discover feature. <\/span><\/p>\n<p><span style=\"font-weight: 400;\">For example, the Etsy app lets you swipe right for feeds showing goods they recommend, you\u2019ve liked, or that are nearby. They\u2019re taking advantage of several filtering options as it makes sense for the needs of their users. <\/span><\/p>\n<p><strong>Pro-tip: Etsy\u2019s addition of the \u201cLocal\u201d feed also endorses their mission to support local artisans. <a title=\"Tech Services Making a Social Impact\" href=\"http:\/\/thinkapps.com\/blog\/discovery\/tech-services-social-impact\/\" target=\"_blank\">Weave your mission<\/a> into your functionality wherever possible.<\/strong><\/p>\n<p><a href=\"http:\/\/d1vqbpto5tbbz0.cloudfront.net\/blog\/wp-content\/uploads\/2015\/09\/11155240\/keep.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"855\" class=\"alignnone wp-image-5493 size-large\" src=\"http:\/\/d1vqbpto5tbbz0.cloudfront.net\/blog\/wp-content\/uploads\/2015\/09\/11155240\/keep-1024x855.png\" alt=\"Activity Stream keep-app-feed\" srcset=\"https:\/\/d1vqbpto5tbbz0.cloudfront.net\/blog\/wp-content\/uploads\/2015\/09\/11155240\/keep.png 1024w, https:\/\/d1vqbpto5tbbz0.cloudfront.net\/blog\/wp-content\/uploads\/2015\/09\/11155240\/keep.png 300w, https:\/\/d1vqbpto5tbbz0.cloudfront.net\/blog\/wp-content\/uploads\/2015\/09\/11155240\/keep.png 1200w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/a><\/p>\n<h3><a id=\"keep-it-clean\"><\/a>Keep It Clean<\/h3>\n<p><span style=\"font-weight: 400;\">Especially if you have a shopping app. Nothing can muddy up the simplicity of feed UX quite like visual clutter. <\/span><\/p>\n<p><span style=\"font-weight: 400;\">That\u2019s why <a title=\"Keep\" href=\"https:\/\/keep.com\/\" target=\"_blank\">Keep<\/a>\u2019s shopping app is so addictive. There are no prices or brand names in the main feed \u2014 it\u2019s just pretty pictures, which works well for a shopping app. <\/span><\/p>\n<p><span style=\"font-weight: 400;\">With Instagram, they\u2019ve cut down on clutter by limiting the number of comments you see by default. This is good or else our entire feeds would probably just be\u00a0Beyonc\u00e9 comments. <\/span><\/p>\n<p><span style=\"font-weight: 400;\">Think carefully about what your users need to see in their scroll and what information to withhold, making it worth their while to tap to see more.<\/span><\/p>\n<p><a href=\"http:\/\/d1vqbpto5tbbz0.cloudfront.net\/blog\/wp-content\/uploads\/2015\/09\/11155237\/quizup.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"855\" class=\"alignnone wp-image-5492 size-large\" src=\"http:\/\/d1vqbpto5tbbz0.cloudfront.net\/blog\/wp-content\/uploads\/2015\/09\/11155237\/quizup-1024x855.png\" alt=\"Activity Stream quizup-home-feed\" srcset=\"https:\/\/d1vqbpto5tbbz0.cloudfront.net\/blog\/wp-content\/uploads\/2015\/09\/11155237\/quizup.png 1024w, https:\/\/d1vqbpto5tbbz0.cloudfront.net\/blog\/wp-content\/uploads\/2015\/09\/11155237\/quizup.png 300w, https:\/\/d1vqbpto5tbbz0.cloudfront.net\/blog\/wp-content\/uploads\/2015\/09\/11155237\/quizup.png 1200w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/a><\/p>\n<h3><a id=\"one-tap-actions\"><\/a>One-Tap Actions<\/h3>\n<p><span style=\"font-weight: 400;\">Obviously with apps like Instagram, Twitter, and Facebook, you can \u201clike\u201d right from your feed. This begs the question: which one-tap actions are important for your app&#8217;s activity stream?\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400;\"><a title=\"QuizUp\" href=\"https:\/\/www.quizup.com\/en\" target=\"_blank\">QuizUp<\/a> is a social quiz game. In the app, a user&#8217;s home feed is\u00a0based on their\u00a0chosen interests\u00a0<\/span>\u2014\u00a0<span style=\"font-weight: 400;\">anything from neuroscience to Disney movies.\u00a0A user can like or comment on people\u2019s posts and\u00a0also play a round based on that topic with one tap from their\u00a0feed.<\/span><\/p>\n<p><a href=\"http:\/\/d1vqbpto5tbbz0.cloudfront.net\/blog\/wp-content\/uploads\/2015\/09\/11173711\/now-twitter.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"855\" class=\"alignnone wp-image-5538 size-large\" src=\"http:\/\/d1vqbpto5tbbz0.cloudfront.net\/blog\/wp-content\/uploads\/2015\/09\/11173711\/now-twitter-1024x855.png\" alt=\"Activity Stream refresh-animation-google-twitter\" srcset=\"https:\/\/d1vqbpto5tbbz0.cloudfront.net\/blog\/wp-content\/uploads\/2015\/09\/11173711\/now-twitter.png 1024w, https:\/\/d1vqbpto5tbbz0.cloudfront.net\/blog\/wp-content\/uploads\/2015\/09\/11173711\/now-twitter.png 300w, https:\/\/d1vqbpto5tbbz0.cloudfront.net\/blog\/wp-content\/uploads\/2015\/09\/11173711\/now-twitter.png 1200w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/a><\/p>\n<h3><a id=\"think-about-your-refresh\"><\/a>Think About Your Refresh<\/h3>\n<p><span style=\"font-weight: 400;\">It\u2019s a small detail, but people are used to the mobile functionality of dragging down to refresh a feed. What animation in your app will show users that the page is, in fact, refreshing? <\/span><\/p>\n<p><span style=\"font-weight: 400;\">Google Now employs a spinning, color-changing circle\u00a0at the top of the page when in the process of refreshing. Twitter\u2019s approach is less quirky, with a simple tweet-height space housing\u00a0a spinning wheel next to the word\u00a0\u201cLoading.\u201d<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Whether you go quirky or practical, pick an animation that reassures\u00a0your user that the refresh is underway.<\/span><\/p>\n<h2><a id=\"building-activity-stream-newsfeed\"><\/a>Building an Activity Stream or Newsfeed into Your App<\/h2>\n<p>Once you&#8217;ve picked a feed strategy that works for your app, you don&#8217;t need to go hire a new team to build it.<\/p>\n<p>The rising popularity of this app functionality means that there are services out there to help you build your own activity stream, even without a full development\u00a0team in-house.<\/p>\n<p>In this post, we&#8217;ll explore three of those services:\u00a0<span style=\"font-weight: 400;\"><a title=\"Stream\" href=\"http:\/\/getstream.io\/\" target=\"_blank\">Stream,<\/a>\u00a0<\/span><a title=\"AppBoy\" href=\"https:\/\/www.appboy.com\" target=\"_blank\"><span style=\"font-weight: 400;\">AppBoy<\/span><\/a>, and\u00a0<a title=\"Gigya\" href=\"http:\/\/www.gigya.com\/activity-feed\/\" target=\"_blank\"><span style=\"font-weight: 400;\">Gigya<\/span><\/a>. Here is\u00a0a brief comparison of their features and pricing, with additional details about each service below.<\/p>\n<p><a href=\"http:\/\/d1vqbpto5tbbz0.cloudfront.net\/blog\/wp-content\/uploads\/2015\/09\/16130044\/attachment-1.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1960\" height=\"1397\" class=\"extended alignnone wp-image-5654 size-full\" src=\"http:\/\/d1vqbpto5tbbz0.cloudfront.net\/blog\/wp-content\/uploads\/2015\/09\/16130044\/attachment-1.png\" alt=\"Activity Stream - Summary of Newsfeed Services\" srcset=\"https:\/\/d1vqbpto5tbbz0.cloudfront.net\/blog\/wp-content\/uploads\/2015\/09\/16130044\/attachment-1.png 1960w, https:\/\/d1vqbpto5tbbz0.cloudfront.net\/blog\/wp-content\/uploads\/2015\/09\/16130044\/attachment-1.png 300w, https:\/\/d1vqbpto5tbbz0.cloudfront.net\/blog\/wp-content\/uploads\/2015\/09\/16130044\/attachment-1.png 1024w\" sizes=\"(max-width: 1960px) 100vw, 1960px\" \/><\/a><\/p>\n<h2><a id=\"stream\"><\/a>Stream: Feed CRM<\/h2>\n<p><a title=\"Stream\" href=\"http:\/\/getstream.io\/\" target=\"_blank\"><span style=\"font-weight: 400;\">Stream<\/span><\/a><span style=\"font-weight: 400;\"> provides the ability to build a scalable newsfeed directly into your web or mobile app with little to no effort.\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400;\">That is, with just a few lines of code, developers are able to implement Instagram or Facebook-like feeds that would normally take weeks or even months to develop from scratch.<\/span><\/p>\n<p><a href=\"http:\/\/d1vqbpto5tbbz0.cloudfront.net\/blog\/wp-content\/uploads\/2015\/09\/16130044\/4-Types-of-Stream-Activity-Feeds.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1225\" height=\"1107\" class=\"alignnone size-full wp-image-5632\" src=\"http:\/\/d1vqbpto5tbbz0.cloudfront.net\/blog\/wp-content\/uploads\/2015\/09\/16130044\/4-Types-of-Stream-Activity-Feeds.png\" alt=\"Activity Stream - 4 Types of Stream Activity Feeds\" srcset=\"https:\/\/d1vqbpto5tbbz0.cloudfront.net\/blog\/wp-content\/uploads\/2015\/09\/16130044\/4-Types-of-Stream-Activity-Feeds.png 1225w, https:\/\/d1vqbpto5tbbz0.cloudfront.net\/blog\/wp-content\/uploads\/2015\/09\/16130044\/4-Types-of-Stream-Activity-Feeds.png 300w, https:\/\/d1vqbpto5tbbz0.cloudfront.net\/blog\/wp-content\/uploads\/2015\/09\/16130044\/4-Types-of-Stream-Activity-Feeds.png 1024w\" sizes=\"(max-width: 1225px) 100vw, 1225px\" \/><\/a><\/p>\n<p><span style=\"font-weight: 400;\">Stream\u00a0provides<\/span><span style=\"font-weight: 400;\">\u00a0four different types of feeds that founders or product managers\u00a0can add to their web or mobile app:<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400;\"><b>Flat Feeds <\/b><span style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">show content from users you follow<\/span><\/span><span style=\"font-weight: 400;\">, separated by individual posts (like how\u00a0Twitter shows tweets from people you follow). <\/span><\/li>\n<li style=\"font-weight: 400;\"><b>Aggregated Feeds<\/b><span style=\"font-weight: 400;\"> are similar to flat feeds, but aggregated and grouped contextually around an\u00a0item rather than a\u00a0person. For instance on Facebook, if a user posts a photo, below the photo you might\u00a0see &#8220;Person A and Person B like your photo,&#8221; as illustrated below. <\/span><\/li>\n<li style=\"font-weight: 400;\"><b>Notification Feeds<\/b><span style=\"font-weight: 400;\">\u00a0are similar to the notifications tab on Facebook. They&#8217;re\u00a0essentially an aggregated feed, but with the ability to track a list of read\/unread notifications in real time.<\/span><\/li>\n<li style=\"font-weight: 400;\"><b>Profile Pages <\/b><span style=\"font-weight: 400;\">centralize the feed contextually based on the user. That is, you get a list of all activities by an individual user, similar to viewing a friend\u2019s Facebook profile.<\/span><\/li>\n<\/ul>\n<p><a href=\"http:\/\/d1vqbpto5tbbz0.cloudfront.net\/blog\/wp-content\/uploads\/2015\/09\/16130044\/image_2.png\"><img loading=\"lazy\" decoding=\"async\" width=\"725\" height=\"568\" class=\"alignnone wp-image-5637 size-full\" src=\"http:\/\/d1vqbpto5tbbz0.cloudfront.net\/blog\/wp-content\/uploads\/2015\/09\/16130044\/image_2.png\" alt=\"Activity Stream - stream-feed\" srcset=\"https:\/\/d1vqbpto5tbbz0.cloudfront.net\/blog\/wp-content\/uploads\/2015\/09\/16130044\/image_2.png 725w, https:\/\/d1vqbpto5tbbz0.cloudfront.net\/blog\/wp-content\/uploads\/2015\/09\/16130044\/image_2.png 300w\" sizes=\"(max-width: 725px) 100vw, 725px\" \/><\/a><\/p>\n<h3>Implementing Stream<\/h3>\n<p><span style=\"font-weight: 400;\">Stream is primarily designed to be integrated into web\u00a0apps. <\/span><\/p>\n<p><span style=\"font-weight: 400;\">Accordingly, the company provides SDKs for Ruby, JavaScript\/Node, Python, PHP, and Java. There are also some unofficial clients written by the community, such as .NET and Go.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">If companies want to integrate Stream feeds directly into their iOS or Android apps, it would require some work, as they don\u2019t currently offer native mobile SDKs. Stream suggests first creating a Node.js or server using the supported SDKs, and then connecting your mobile app to the server using REST APIs. <\/span><\/p>\n<p><span style=\"font-weight: 400;\">Developing an activity stream\u00a0is relatively straightforward with Stream, and they support developers with excellent documentation. <\/span><\/p>\n<p><span style=\"font-weight: 400;\">For example, creating a flat feed to show that a hypothetical user named Eric tweeted \u201cHello ThinkApps\u201d is as easy as:<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span><\/p>\n<p style=\"padding-left: 60px;\"><span style=\"font-weight: 400;\">\/\/ Initialize the client with your api key, no secret and your site id<\/span><\/p>\n<p style=\"padding-left: 60px;\"><span style=\"font-weight: 400;\">client = stream.connect(\u2018YOUR_KEY&#8217;, null, &#8216;5743&#8217;);<\/span><\/p>\n<p style=\"padding-left: 60px;\"><span style=\"font-weight: 400;\">\/\/ Get the feed object with a valid feed token<\/span><\/p>\n<p style=\"padding-left: 60px;\"><span style=\"font-weight: 400;\">ericFeed = client.feed(&#8216;user&#8217;, &#8216;eric&#8217;, &#8216;W1ZR1JB1d9VrPUqMuJ6Xoki0yfU&#8217;);<\/span><\/p>\n<p style=\"padding-left: 60px;\"><span style=\"font-weight: 400;\">\/\/ Add the activity to the feed<\/span><\/p>\n<p style=\"padding-left: 60px;\"><span style=\"font-weight: 400;\">ericFeed.addActivity(<\/span><\/p>\n<p style=\"padding-left: 60px;\"><span style=\"font-weight: 400;\"> \u00a0\u00a0{actor: &#8216;eric&#8217;, tweet: \u2018Hello ThinkApps&#8217;, verb: &#8216;tweet&#8217;, object: 1}<\/span><\/p>\n<p style=\"padding-left: 60px;\"><span style=\"font-weight: 400;\">);<\/span><\/p>\n<p><span style=\"font-weight: 400;\">You use <\/span><span style=\"font-weight: 400;\">client.feed <\/span><span style=\"font-weight: 400;\">to reference a particular user\u2019s feed, then you add an activity by actor, verb, object and, in this instance, <\/span><span style=\"font-weight: 400;\">tweet<\/span><span style=\"font-weight: 400;\">.<\/span><\/p>\n<p><a href=\"http:\/\/d1vqbpto5tbbz0.cloudfront.net\/blog\/wp-content\/uploads\/2015\/09\/16130044\/feed_imge-1.png\"><img loading=\"lazy\" decoding=\"async\" width=\"461\" height=\"699\" class=\"alignnone size-full wp-image-5634\" src=\"http:\/\/d1vqbpto5tbbz0.cloudfront.net\/blog\/wp-content\/uploads\/2015\/09\/16130044\/feed_imge-1.png\" alt=\"Activity Stream - stream-social\" srcset=\"https:\/\/d1vqbpto5tbbz0.cloudfront.net\/blog\/wp-content\/uploads\/2015\/09\/16130044\/feed_imge-1.png 461w, https:\/\/d1vqbpto5tbbz0.cloudfront.net\/blog\/wp-content\/uploads\/2015\/09\/16130044\/feed_imge-1.png 198w\" sizes=\"(max-width: 461px) 100vw, 461px\" \/><\/a><\/p>\n<p><span style=\"font-weight: 400;\">The cards are based on four fields: \u00a0<\/span><\/p>\n<ol>\n<li><span style=\"font-weight: 400;\">Actor (the user performing the action)<\/span><\/li>\n<li><span style=\"font-weight: 400;\">Tweet (the custom field containing the message)<\/span><\/li>\n<li><span style=\"font-weight: 400;\">Verb (the type of activity the actor is engaging in)<\/span><\/li>\n<li><span style=\"font-weight: 400;\">Object (ID of the tweet in the database)<\/span><\/li>\n<\/ol>\n<p><span style=\"font-weight: 400;\">The image above shows that Eric has tweeted the message. Jessica already follows Eric and therefore gets notified of Eric\u2019s tweet. In contrast,\u00a0Jules has an aggregated feed and would see that Eric has five tweets, which are grouped by the actor. <\/span><\/p>\n<p><span style=\"font-weight: 400;\">To have a user follow another user, you would simply add the following lines of code:<\/span><\/p>\n<p style=\"padding-left: 60px;\"><span style=\"font-weight: 400;\">\/\/ Let Jessica&#8217;s flat feed follow Eric&#8217;s feed<\/span><\/p>\n<p style=\"padding-left: 60px;\"><span style=\"font-weight: 400;\">jessicaFlatFeed = client.feed(&#8216;flat&#8217;, &#8216;jessica&#8217;, &#8216;5p9wzRE9cSMw32sFZ1X1X77nErI&#8217;);<\/span><\/p>\n<p style=\"padding-left: 60px;\"><span style=\"font-weight: 400;\">jessicaFlatFeed.follow(&#8216;user&#8217;, &#8216;eric&#8217;);<\/span><\/p>\n<h3>Level of Complexity<\/h3>\n<p><span style=\"font-weight: 400;\">Implementation with web apps is very easy with Stream, provided developers have a working knowledge of the supported technologies mentioned\u00a0above. <\/span><\/p>\n<p><span style=\"font-weight: 400;\">Integration into mobile apps requires more effort. But in time, there may either be an official or community-driven SDK that would allow iOS or Android apps to more rapidly integrate with Stream.<\/span><\/p>\n<h3>Pricing<\/h3>\n<p><span style=\"font-weight: 400;\">Stream offers three tiers of pricing based on the number of feed updates conducted per month. The base tier (Hacker) is free, offering up to three million feed updates per month.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">The middle tier (Pro Plan) is $49 per month and offers up to five million feed updates per month. Finally, the Premium Plan at $189 per month provides up to nine million feed updates per month. <\/span><\/p>\n<h3>Documentation<\/h3>\n<p><a title=\"Stream Documentation\" href=\"http:\/\/getstream.io\/docs\/\" target=\"_blank\"><span style=\"font-weight: 400;\">Stream Documentation<\/span><\/a><\/p>\n<h2><a id=\"app-boy\"><\/a>AppBoy: Cross-Platform Feed CRM &amp; Marketing Platform<\/h2>\n<p><a title=\"AppBoy\" href=\"https:\/\/www.appboy.com\" target=\"_blank\"><span style=\"font-weight: 400;\">AppBoy<\/span><\/a><span style=\"font-weight: 400;\">\u00a0goes beyond providing just a feed\/CRM service, like Stream. Instead, it offers a complete set of marketing tools to increase customer acquisition and retention. <\/span><\/p>\n<p><span style=\"font-weight: 400;\">Whereas Stream is web-first, AppBoy is truly <a title=\"Cross Platform Mobile Development Tools\" href=\"http:\/\/thinkapps.com\/blog\/development\/develop-for-ios-v-android-cross-platform-tools\/\" target=\"_blank\">a cross\u00a0platform tool<\/a>, including iOS, Android, Amazon Fire, Windows 8, web, and Unity. <\/span><\/p>\n<p><span style=\"font-weight: 400;\">AppBoy provides three types of message-related marketing features: <\/span><\/p>\n<ol>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">Push notifications to active (and even non-active) users to increase customer retention and direct users back to the app<\/span><\/li>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">Email messaging to distribute rich <a title=\"Optimizing Your Call to Action (CTA)\" href=\"http:\/\/thinkapps.com\/blog\/post-launch\/optimizing-your-cta-call-to-action\/\" target=\"_blank\">call-to-action<\/a> based email content<\/span><\/li>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">In-app native messaging, which provides <a title=\"Apple Watch Notification Tutorial\" href=\"http:\/\/thinkapps.com\/blog\/design\/apple-watch-notification-tutorial\/\" target=\"_blank\">in-app notifications and alerts<\/a> to direct users to specific areas of the app<\/span><\/li>\n<\/ol>\n<p><span style=\"font-weight: 400;\">Additionally, AppBoy provides robust marketing tools, including advanced, multivariate A\/B testing to deliver these notifications and messages based on algorithms that determine when each user will most likely use the app.<\/span><\/p>\n<p><a href=\"http:\/\/d1vqbpto5tbbz0.cloudfront.net\/blog\/wp-content\/uploads\/2015\/09\/16130044\/Mobile-Marketing-Automation-Products-Appboy.png\"><img loading=\"lazy\" decoding=\"async\" width=\"884\" height=\"600\" class=\"alignnone wp-image-5639 size-full\" src=\"http:\/\/d1vqbpto5tbbz0.cloudfront.net\/blog\/wp-content\/uploads\/2015\/09\/16130044\/Mobile-Marketing-Automation-Products-Appboy.png\" alt=\"Activity Stream - AppBoy Mobile Marketing Automation Products\" srcset=\"https:\/\/d1vqbpto5tbbz0.cloudfront.net\/blog\/wp-content\/uploads\/2015\/09\/16130044\/Mobile-Marketing-Automation-Products-Appboy.png 884w, https:\/\/d1vqbpto5tbbz0.cloudfront.net\/blog\/wp-content\/uploads\/2015\/09\/16130044\/Mobile-Marketing-Automation-Products-Appboy.png 300w\" sizes=\"(max-width: 884px) 100vw, 884px\" \/><\/a><\/p>\n<p><span style=\"font-weight: 400;\">But the AppBoy feature that we&#8217;ll be focusing on in this post is the News Feed, which provides developers with a set of News Item Cards and Cross Promotional Cards. <\/span><\/p>\n<p><span style=\"font-weight: 400;\">The cards are authored and administered on the AppBoy dashboard and automatically pulled down into your web or mobile app. AppBoy also provides an in-app notification center that can easily be updated by non-technical administrators, without having to change any code.<\/span><\/p>\n<p><a href=\"http:\/\/d1vqbpto5tbbz0.cloudfront.net\/blog\/wp-content\/uploads\/2015\/09\/16130044\/news_feed_dashboard_example.png\"><img loading=\"lazy\" decoding=\"async\" width=\"931\" height=\"790\" class=\"alignnone size-full wp-image-5641\" src=\"http:\/\/d1vqbpto5tbbz0.cloudfront.net\/blog\/wp-content\/uploads\/2015\/09\/16130044\/news_feed_dashboard_example.png\" alt=\"Activity Stream - AppBoy_news_feed_dashboard_example\" srcset=\"https:\/\/d1vqbpto5tbbz0.cloudfront.net\/blog\/wp-content\/uploads\/2015\/09\/16130044\/news_feed_dashboard_example.png 931w, https:\/\/d1vqbpto5tbbz0.cloudfront.net\/blog\/wp-content\/uploads\/2015\/09\/16130044\/news_feed_dashboard_example.png 300w\" sizes=\"(max-width: 931px) 100vw, 931px\" \/><\/a><\/p>\n<p><a href=\"http:\/\/d1vqbpto5tbbz0.cloudfront.net\/blog\/wp-content\/uploads\/2015\/09\/16130044\/Newsfeed_category.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1028\" height=\"979\" class=\"alignnone size-full wp-image-5642\" src=\"http:\/\/d1vqbpto5tbbz0.cloudfront.net\/blog\/wp-content\/uploads\/2015\/09\/16130044\/Newsfeed_category.png\" alt=\"Activity Stream - AppBoy_Newsfeed_category\" srcset=\"https:\/\/d1vqbpto5tbbz0.cloudfront.net\/blog\/wp-content\/uploads\/2015\/09\/16130044\/Newsfeed_category.png 1028w, https:\/\/d1vqbpto5tbbz0.cloudfront.net\/blog\/wp-content\/uploads\/2015\/09\/16130044\/Newsfeed_category.png 300w, https:\/\/d1vqbpto5tbbz0.cloudfront.net\/blog\/wp-content\/uploads\/2015\/09\/16130044\/Newsfeed_category.png 1024w\" sizes=\"(max-width: 1028px) 100vw, 1028px\" \/><\/a><\/p>\n<p><span style=\"font-weight: 400;\">Cross Promotional cards are distinct cards that display content from the App Store or Google Play Store\u00a0in order\u00a0to cross-promote another app that you want to recommend to your users. <\/span><\/p>\n<p><span style=\"font-weight: 400;\">News Item Cards and Cross Promotional Cards are also tracked for impressions. Below is an example of how a News Item Card might look on a mobile device:<\/span><\/p>\n<p><a href=\"http:\/\/d1vqbpto5tbbz0.cloudfront.net\/blog\/wp-content\/uploads\/2015\/09\/16130044\/News_Feed_Ad.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1366\" height=\"1645\" class=\"alignnone wp-image-5616 size-full\" src=\"http:\/\/d1vqbpto5tbbz0.cloudfront.net\/blog\/wp-content\/uploads\/2015\/09\/16130044\/News_Feed_Ad.png\" alt=\"Activity Stream - AppBoy-personalized-feed\" srcset=\"https:\/\/d1vqbpto5tbbz0.cloudfront.net\/blog\/wp-content\/uploads\/2015\/09\/16130044\/News_Feed_Ad.png 1366w, https:\/\/d1vqbpto5tbbz0.cloudfront.net\/blog\/wp-content\/uploads\/2015\/09\/16130044\/News_Feed_Ad.png 249w, https:\/\/d1vqbpto5tbbz0.cloudfront.net\/blog\/wp-content\/uploads\/2015\/09\/16130044\/News_Feed_Ad.png 850w\" sizes=\"(max-width: 1366px) 100vw, 1366px\" \/><\/a><\/p>\n<p><span style=\"font-weight: 400;\">For more inspiration, check out some of the <\/span><a title=\"Newsfeed Gallery\" href=\"https:\/\/academy.appboy.com\/Best_Practices\/Client_Integration_Gallery#news-feed\" target=\"_blank\"><span style=\"font-weight: 400;\">sample newsfeed galleries<\/span><\/a><span style=\"font-weight: 400;\"> AppBoy is showcasing.<\/span><\/p>\n<h3>Implementing AppBoy<\/h3>\n<p><a title=\"AppBoy Integration Instructions\" href=\"https:\/\/dashboard.appboy.com\/documentation\/integration\/55f0b2d76461731ffde20000\" target=\"_blank\"><span style=\"font-weight: 400;\">AppBoy offers specific directions for each platform<\/span><\/a><span style=\"font-weight: 400;\">, which are in themselves fairly straightforward. <\/span><\/p>\n<p><span style=\"font-weight: 400;\">For iOS, you would install the SDK via CocoaPods and import the library.<\/span> <span style=\"font-weight: 400;\">You would then assign a user id, which distinguishes each of your users. It could be their username or something less obvious for privacy reasons:<\/span><\/p>\n<p style=\"padding-left: 60px;\">[[Appboy sharedInstance] changeUser:@&#8221;YOUR_USER_ID_STRING&#8221;];<\/p>\n<p><span style=\"font-weight: 400;\">You can just as easily assign other attributes to elements in your app, such as in products to <a title=\"The Definitive Guide to Adding Payments to Your Web or Mobile App\" href=\"http:\/\/thinkapps.com\/blog\/development\/payments-app-definitive-guide\/\" target=\"_blank\">track purchases<\/a> and revenue:<\/span><\/p>\n<p style=\"padding-left: 60px;\"><span style=\"font-weight: 400;\">[[Appboy sharedInstance] logPurchase:@&#8221;your product ID&#8221;inCurrency:@&#8221;USD&#8221;atPrice:[[[NSDecimalNumber alloc] initWithString:@&#8221;0.99&#8243;] autorelease]];<\/span><\/p>\n<p><a title=\"AppBoy: Creating a Newsfeed\" href=\"https:\/\/academy.appboy.com\/Quick_Wins\/Creating_a_News_Feed_Item\" target=\"_blank\"><span style=\"font-weight: 400;\">Creating the activity stream itself<\/span><\/a><span style=\"font-weight: 400;\"> is also straightforward with AppBoy. Companies can author content directly from the dashboard, creating specific types of cards for different UI purposes. <\/span><\/p>\n<p><span style=\"font-weight: 400;\">On iOS, you can easily integrate the newsfeed by using\u00a0a <\/span><span style=\"font-weight: 400;\">FeedViewController,<\/span><span style=\"font-weight: 400;\"> which comes in different flavors depending on the look and feel developers are seeking.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">While AppBoy does provide a substantial variety of activity stream\u00a0items, it lacks the ability to group aggregate newsfeeds or notification-style newsfeeds out of the box, as you can do with Stream. However, it is possible to emulate those features via AppBoy with some additional coding effort.<\/span><\/p>\n<h3>Level of Complexity<\/h3>\n<p><span style=\"font-weight: 400;\">AppBoy\u2019s solution integration is extremely easy to implement. While Stream also offers a relatively simple integration for newsfeeds, authoring still requires a bit of coding.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">In terms of different platforms, Stream makes native mobile integration a bit cumbersome, as it requires an intermediary server to be set up and, with a lack of native SDK client, for developers to directly interact with Stream via RESTFul API calls. <\/span><\/p>\n<p><span style=\"font-weight: 400;\">AppBoy, on the other hand, offers cross platform integration with just a few lines of code, while also providing the benefit of comprehensive analytics, intelligent user engagement models, and multivariate testing. <\/span><\/p>\n<h3>Pricing<\/h3>\n<p><span style=\"font-weight: 400;\">AppBoy currently offers two tiers of pricing. <\/span><\/p>\n<p><span style=\"font-weight: 400;\">The $10 per month plan offers:<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">unlimited push notifications and user feedback<\/span><\/li>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">50 data points per active user per month<\/span><\/li>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">up to 10,000 active users<\/span><\/li>\n<\/ul>\n<p><span style=\"font-weight: 400;\">The Pro Plan, at $100 per month, ups the number of active users to 100,000.<\/span><\/p>\n<h3>Documentation<\/h3>\n<p><a title=\"AppBoy Documentation\" href=\"https:\/\/documentation.appboy.com\" target=\"_blank\"><span style=\"font-weight: 400;\">AppBoy Documentation<\/span><\/a><\/p>\n<h2><a id=\"gigya\"><\/a>Gigya Activity Feed<\/h2>\n<p><a title=\"Gigya\" href=\"http:\/\/www.gigya.com\/activity-feed\/\" target=\"_blank\"><span style=\"font-weight: 400;\">Gigya<\/span><\/a><span style=\"font-weight: 400;\"> provides various social and authentication solutions, from <\/span><a title=\"Gigya Solutions\" href=\"http:\/\/www.gigya.com\/solutions\/?solution=identity\" target=\"_blank\"><span style=\"font-weight: 400;\">customer identification and management services<\/span><\/a><span style=\"font-weight: 400;\"> to <\/span><a title=\"Gigya Registration\" href=\"http:\/\/www.gigya.com\/product\/registration-as-a-service\/\" target=\"_blank\"><span style=\"font-weight: 400;\">custom registration\/authentication services<\/span><\/a><span style=\"font-weight: 400;\"> to\u00a0<\/span><a title=\"Gigya Social Engagement\" href=\"http:\/\/www.gigya.com\/products\/add-ons\/social-engagement\/\" target=\"_blank\"><span style=\"font-weight: 400;\">social engagement<\/span><\/a><span style=\"font-weight: 400;\">. <\/span><\/p>\n<p><span style=\"font-weight: 400;\">Like the other solutions mentioned above, Gigya provides the ability for developers to author and integrate <\/span><span style=\"font-weight: 400;\">activity streams<\/span><span style=\"font-weight: 400;\">\u00a0that are contextual and update in real time.<\/span><\/p>\n<p><a href=\"http:\/\/d1vqbpto5tbbz0.cloudfront.net\/blog\/wp-content\/uploads\/2015\/09\/16130044\/activity-feed-DET1.png\"><img loading=\"lazy\" decoding=\"async\" width=\"582\" height=\"400\" class=\"alignnone size-full wp-image-5644\" src=\"http:\/\/d1vqbpto5tbbz0.cloudfront.net\/blog\/wp-content\/uploads\/2015\/09\/16130044\/activity-feed-DET1.png\" alt=\"Activity Stream - Gigya-nfl-image\" srcset=\"https:\/\/d1vqbpto5tbbz0.cloudfront.net\/blog\/wp-content\/uploads\/2015\/09\/16130044\/activity-feed-DET1.png 582w, https:\/\/d1vqbpto5tbbz0.cloudfront.net\/blog\/wp-content\/uploads\/2015\/09\/16130044\/activity-feed-DET1.png 300w\" sizes=\"(max-width: 582px) 100vw, 582px\" \/><\/a><\/p>\n<p><span style=\"font-weight: 400;\">When integrated with Gigya\u2019s other tools (such as the Social Plugins), comments and other forms of engagement activities (likes, ratings, etc.) from users can easily be tracked through analytics. Complex activities from users can also easily be tracked and added to the activity feed platform through an API call.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Leveraging social graph integration, the activity feed is able to highlight specific content that users and their friends are following and reading, letting active users know which content their friends find interesting. \u00a0<\/span><\/p>\n<p>The Activity Feed is also white-labeled, meaning it is customizable to match the look and feel of your website through CSS or on iOS and Android via their appropriate class properties.<\/p>\n<p><a href=\"http:\/\/d1vqbpto5tbbz0.cloudfront.net\/blog\/wp-content\/uploads\/2015\/09\/16130044\/Ad-ons-_-Engagement-_-Activity-Feed.png\"><img loading=\"lazy\" decoding=\"async\" width=\"550\" height=\"456\" class=\"alignnone size-full wp-image-5646\" src=\"http:\/\/d1vqbpto5tbbz0.cloudfront.net\/blog\/wp-content\/uploads\/2015\/09\/16130044\/Ad-ons-_-Engagement-_-Activity-Feed.png\" alt=\"Activity Stream - Gigya-activity-feed\" srcset=\"https:\/\/d1vqbpto5tbbz0.cloudfront.net\/blog\/wp-content\/uploads\/2015\/09\/16130044\/Ad-ons-_-Engagement-_-Activity-Feed.png 550w, https:\/\/d1vqbpto5tbbz0.cloudfront.net\/blog\/wp-content\/uploads\/2015\/09\/16130044\/Ad-ons-_-Engagement-_-Activity-Feed.png 300w\" sizes=\"(max-width: 550px) 100vw, 550px\" \/><\/a><\/p>\n<p><span style=\"font-weight: 400;\">With the Gigya plugin, users are also able to <\/span><a title=\"A Comprehensive Guide to Building Chat into Your App\" href=\"http:\/\/thinkapps.com\/blog\/development\/how-to-build-chat-into-app\/\" target=\"_blank\"><span style=\"font-weight: 400;\">live chat<\/span><\/a><span style=\"font-weight: 400;\"> with their friends and the entire community in real time, with the ability for users to invite new friends to participate in the community. Thus, it offers the opportunity for customer acquisition through social referral.\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Gigya, like AppBoy, offers true cross platform support (unlike Stream, which is primarily focused on websites). But, Gigya lacks the aggregation benefits of Stream, as well as the prowess and comprehensiveness of the analytics and intelligent engagement functionalities found in AppBoy. <\/span><\/p>\n<h3>Implementing Gigya<\/h3>\n<p><span style=\"font-weight: 400;\">Gigya provides both\u00a0<\/span><a title=\"Gigya Documentation\" href=\"http:\/\/developers.gigya.com\/display\/GD\/Gigya%27s+Documentation\" target=\"_blank\"><span style=\"font-weight: 400;\">server and client-side SDKs<\/span><\/a><span style=\"font-weight: 400;\">. <\/span><\/p>\n<p><span style=\"font-weight: 400;\">The client-side SDKs supported by the platform include\u00a0<\/span><a title=\"Gigya JavaScript SDK\" href=\"http:\/\/developers.gigya.com\/display\/GD\/JavaScript+API\" target=\"_blank\"><span style=\"font-weight: 400;\">JavaScript<\/span><\/a><span style=\"font-weight: 400;\">, <\/span><a title=\"Gigya iOS SDK\" href=\"http:\/\/developers.gigya.com\/display\/GD\/iOS\" target=\"_blank\"><span style=\"font-weight: 400;\">iOS<\/span><\/a><span style=\"font-weight: 400;\">, and <\/span><a title=\"Gigya Android SDK\" href=\"http:\/\/developers.gigya.com\/display\/GD\/Android\" target=\"_blank\"><span style=\"font-weight: 400;\">Android<\/span><\/a><span style=\"font-weight: 400;\">. On the server-side, in addition to its <\/span><a title=\"Gigya REST API\" href=\"http:\/\/developers.gigya.com\/display\/GD\/REST+API\" target=\"_blank\"><span style=\"font-weight: 400;\">REST API<\/span><\/a><span style=\"font-weight: 400;\">, Gigya provides PHP, Java, .NET, and Python SDKs. This definitely makes it one of the most comprehensive in terms of cross platform support.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Gigya&#8217;s\u00a0documentation, however, isn\u2019t as clear and easy to follow as the other two solutions we&#8217;ve discussed. With iOS for example, the setup instructions require you to download the SDK, rather than use the more modern approach of CocoaPods for continuous download and update. <\/span><\/p>\n<p><span style=\"font-weight: 400;\">After\u00a0referencing the SDK in the Xcode project, the developer then needs to implement the following in the AppDelegate:<\/span><\/p>\n<p style=\"padding-left: 60px;\"><span style=\"font-weight: 400;\">&#8211; (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation<\/span><\/p>\n<p style=\"padding-left: 60px;\"><span style=\"font-weight: 400;\">{<\/span><\/p>\n<p style=\"padding-left: 60px;\"><span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0return [Gigya handleOpenURL:url application:application sourceApplication:sourceApplication annotation:annotation];<\/span><\/p>\n<p style=\"padding-left: 60px;\"><span style=\"font-weight: 400;\">}<\/span><\/p>\n<p style=\"padding-left: 60px;\"><span style=\"font-weight: 400;\">&#8211; (void)applicationDidBecomeActive:(UIApplication *)application<\/span><\/p>\n<p style=\"padding-left: 60px;\"><span style=\"font-weight: 400;\">{<\/span><\/p>\n<p style=\"padding-left: 60px;\"><span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0[Gigya handleDidBecomeActive];<\/span><\/p>\n<p style=\"padding-left: 60px;\"><span style=\"font-weight: 400;\">}<\/span><\/p>\n<p><span style=\"font-weight: 400;\">These register in the main part of the app, providing the ability for Gigya to handle events. <\/span><\/p>\n<p>To publish to the user activity stream, which would publish to all the connected providers, the developer would do:<\/p>\n<p style=\"padding-left: 60px;\"><span style=\"font-weight: 400;\">\/\/ Create the media item to add to the user action<\/span><\/p>\n<p style=\"padding-left: 60px;\"><span style=\"font-weight: 400;\">NSDictionary *mediaItem = @{ @&#8221;src&#8221;: @&#8221;<\/span><span style=\"font-weight: 400;\">http:\/\/www.infozoom.ru\/wp-content\/uploads\/2009\/08\/d06_19748631.jpg&#8221;<\/span><span style=\"font-weight: 400;\">,<\/span><\/p>\n<p style=\"padding-left: 60px;\"><span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0@&#8221;href&#8221;: @&#8221;<\/span><span style=\"font-weight: 400;\">http:\/\/www.gigya.com&#8221;<\/span><span style=\"font-weight: 400;\">,<\/span><\/p>\n<p style=\"padding-left: 60px;\"><span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0@&#8221;type&#8221;: @&#8221;image&#8221; };<\/span><\/p>\n<p style=\"padding-left: 60px;\"><span style=\"font-weight: 400;\">\/\/ Create the user actionNSDictionary *userAction = @{ @&#8221;title&#8221;: @&#8221;This is my title&#8221;,<\/span><\/p>\n<p style=\"padding-left: 60px;\"><span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0@&#8221;userMessage&#8221;: @&#8221;This is my user message&#8221;,<\/span><\/p>\n<p style=\"padding-left: 60px;\"><span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0@&#8221;description&#8221;: @&#8221;This is my description&#8221;,<\/span><\/p>\n<p style=\"padding-left: 60px;\"><span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0@&#8221;linkBack&#8221;: @&#8221;<\/span><span style=\"font-weight: 400;\">http:\/\/gigya.com&#8221;<\/span><span style=\"font-weight: 400;\">,<\/span><\/p>\n<p style=\"padding-left: 60px;\"><span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0@&#8221;mediaItems&#8221;: @[ mediaItem ] };<\/span><\/p>\n<p style=\"padding-left: 60px;\"><span style=\"font-weight: 400;\">\/\/ Create the request and add the userAction parameter<\/span><\/p>\n<p style=\"padding-left: 60px;\"><span style=\"font-weight: 400;\">GSRequest *request = [GSRequest requestForMethod:@&#8221;socialize.publishUserAction&#8221;];<\/span><\/p>\n<p style=\"padding-left: 60px;\"><span style=\"font-weight: 400;\">[request.parameters setObject:userAction forKey:@&#8221;userAction&#8221;];<\/span><\/p>\n<p style=\"padding-left: 60px;\"><span style=\"font-weight: 400;\">\/\/ Send the request<\/span><\/p>\n<p style=\"padding-left: 60px;\"><span style=\"font-weight: 400;\">[request sendWithResponseHandler:^(GSResponse *response, NSError *error) {<\/span><\/p>\n<p style=\"padding-left: 60px;\"><span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0\/\/ Handle the response<\/span><\/p>\n<p style=\"padding-left: 60px;\"><span style=\"font-weight: 400;\">}];<\/span><\/p>\n<h3>Level of Complexity<\/h3>\n<p><span style=\"font-weight: 400;\">As previously mentioned, the instructions for integrating Gigya into a web or mobile app aren\u2019t very clear. With\u00a0iOS for instance, only Objective-C is shown as a guide, with the absence of any Swift guidelines.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">The methods required to integrate on iOS are also quite lengthy. And while it is easier for a developer to implement compared to a completely custom activity feed engine, it is significantly more cumbersome to implement than AppBoy or Stream.<\/span><\/p>\n<h3>Pricing<\/h3>\n<p><span style=\"font-weight: 400;\">Gigya pricing is available only by quote, on a client-by-client basis. But, they do offer a free sand-boxed environment for developers to try out all of the company\u2019s features. <\/span><\/p>\n<h3>Documentation<\/h3>\n<p><a title=\"Gigya Documentation\" href=\"http:\/\/developers.gigya.com\/display\/GD\/Gigya%27s+Documentation\" target=\"_blank\"><span style=\"font-weight: 400;\">Gigya Documentation<\/span><\/a><\/p>\n<h2><a id=\"concluding-thoughts\"><\/a>Keep It Fresh<\/h2>\n<p>Whatever keeps your content current will be the basis of your activity stream.<\/p>\n<p>Your feed\u00a0could be motivated by users or other aggregated content. But either way, ensuring that your user feels involved and excited about new information is key.<\/p>\n<p>Explore what&#8217;s possible within your own web or mobile app and create an activity stream that works to enhance\u00a0your product.<\/p>\n<p>&nbsp;<\/p>\n<p><em>Additional reporting provided by <a title=\"Doron Katz\" href=\"http:\/\/thinkapps.com\/blog\/author\/doron\/\" target=\"_blank\">Doron Katz<\/a>.<\/em><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Activity streams make it easy for users to engage with your app every time they open it. This is everything you need to know to get started.<\/p>\n","protected":false},"author":29,"featured_media":5545,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[5],"tags":[429,422,436,113,350,144,437,431,182,12,420,88,432,435,170],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v22.6 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>The Essential Guide to Building an Activity Stream into Your App<\/title>\n<meta name=\"description\" content=\"Activity streams make it easy for users to engage with your app every time they open it. This is everything you need to know to get started.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/thinkapps.com\/blog\/development\/activity-stream-news-feed-complete-guide\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"The Essential Guide to Building an Activity Stream into Your App\" \/>\n<meta property=\"og:description\" content=\"Activity streams make it easy for users to engage with your app every time they open it. This is everything you need to know to get started.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/thinkapps.com\/blog\/development\/activity-stream-news-feed-complete-guide\/\" \/>\n<meta property=\"og:site_name\" content=\"Build Blog by ThinkApps | Content on Entrepreneurship, Mobile Apps, Web Platforms and more\" \/>\n<meta property=\"article:published_time\" content=\"2015-09-16T13:00:44+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2015-09-18T19:53:07+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/d1vqbpto5tbbz0.cloudfront.net\/blog\/wp-content\/uploads\/2015\/09\/11180115\/feed-feature.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1658\" \/>\n\t<meta property=\"og:image:height\" content=\"841\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Katelan Cunningham\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Katelan Cunningham\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"21 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/thinkapps.com\/blog\/development\/activity-stream-news-feed-complete-guide\/\",\"url\":\"https:\/\/thinkapps.com\/blog\/development\/activity-stream-news-feed-complete-guide\/\",\"name\":\"The Essential Guide to Building an Activity Stream into Your App\",\"isPartOf\":{\"@id\":\"http:\/\/localhost:8080\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/thinkapps.com\/blog\/development\/activity-stream-news-feed-complete-guide\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/thinkapps.com\/blog\/development\/activity-stream-news-feed-complete-guide\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/d1vqbpto5tbbz0.cloudfront.net\/blog\/wp-content\/uploads\/2015\/09\/11180115\/feed-feature.jpg\",\"datePublished\":\"2015-09-16T13:00:44+00:00\",\"dateModified\":\"2015-09-18T19:53:07+00:00\",\"author\":{\"@id\":\"http:\/\/localhost:8080\/blog\/#\/schema\/person\/96a17bf90b1201fdabb0dce65f9e28ed\"},\"description\":\"Activity streams make it easy for users to engage with your app every time they open it. This is everything you need to know to get started.\",\"breadcrumb\":{\"@id\":\"https:\/\/thinkapps.com\/blog\/development\/activity-stream-news-feed-complete-guide\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/thinkapps.com\/blog\/development\/activity-stream-news-feed-complete-guide\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/thinkapps.com\/blog\/development\/activity-stream-news-feed-complete-guide\/#primaryimage\",\"url\":\"https:\/\/d1vqbpto5tbbz0.cloudfront.net\/blog\/wp-content\/uploads\/2015\/09\/11180115\/feed-feature.jpg\",\"contentUrl\":\"https:\/\/d1vqbpto5tbbz0.cloudfront.net\/blog\/wp-content\/uploads\/2015\/09\/11180115\/feed-feature.jpg\",\"width\":1658,\"height\":841,\"caption\":\"Activity Stream - How to Build One into Your App\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/thinkapps.com\/blog\/development\/activity-stream-news-feed-complete-guide\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"http:\/\/localhost:8080\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"The Essential Guide to Building an Activity Stream into Your App\"}]},{\"@type\":\"WebSite\",\"@id\":\"http:\/\/localhost:8080\/blog\/#website\",\"url\":\"http:\/\/localhost:8080\/blog\/\",\"name\":\"Build Blog by ThinkApps | Content on Entrepreneurship, Mobile Apps, Web Platforms and more\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"http:\/\/localhost:8080\/blog\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"http:\/\/localhost:8080\/blog\/#\/schema\/person\/96a17bf90b1201fdabb0dce65f9e28ed\",\"name\":\"Katelan Cunningham\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"http:\/\/localhost:8080\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/14ad919b8cf2e2495cd63c74977ee08a?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/14ad919b8cf2e2495cd63c74977ee08a?s=96&d=mm&r=g\",\"caption\":\"Katelan Cunningham\"},\"description\":\"Katelan is a writer who covers technology, startups, and design. She likes discovering how innovation is constantly impacting our daily lives. Katelan lives in Los Angeles by way of The South.\",\"sameAs\":[\"http:\/\/katelancunningham.com\/\",\"https:\/\/www.linkedin.com\/in\/katelancunningham\",\"https:\/\/x.com\/kalivia\"],\"url\":\"https:\/\/thinkapps.com\/blog\/author\/katelan\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"The Essential Guide to Building an Activity Stream into Your App","description":"Activity streams make it easy for users to engage with your app every time they open it. This is everything you need to know to get started.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/thinkapps.com\/blog\/development\/activity-stream-news-feed-complete-guide\/","og_locale":"en_US","og_type":"article","og_title":"The Essential Guide to Building an Activity Stream into Your App","og_description":"Activity streams make it easy for users to engage with your app every time they open it. This is everything you need to know to get started.","og_url":"https:\/\/thinkapps.com\/blog\/development\/activity-stream-news-feed-complete-guide\/","og_site_name":"Build Blog by ThinkApps | Content on Entrepreneurship, Mobile Apps, Web Platforms and more","article_published_time":"2015-09-16T13:00:44+00:00","article_modified_time":"2015-09-18T19:53:07+00:00","og_image":[{"width":1658,"height":841,"url":"http:\/\/d1vqbpto5tbbz0.cloudfront.net\/blog\/wp-content\/uploads\/2015\/09\/11180115\/feed-feature.jpg","type":"image\/jpeg"}],"author":"Katelan Cunningham","twitter_misc":{"Written by":"Katelan Cunningham","Est. reading time":"21 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/thinkapps.com\/blog\/development\/activity-stream-news-feed-complete-guide\/","url":"https:\/\/thinkapps.com\/blog\/development\/activity-stream-news-feed-complete-guide\/","name":"The Essential Guide to Building an Activity Stream into Your App","isPartOf":{"@id":"http:\/\/localhost:8080\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/thinkapps.com\/blog\/development\/activity-stream-news-feed-complete-guide\/#primaryimage"},"image":{"@id":"https:\/\/thinkapps.com\/blog\/development\/activity-stream-news-feed-complete-guide\/#primaryimage"},"thumbnailUrl":"https:\/\/d1vqbpto5tbbz0.cloudfront.net\/blog\/wp-content\/uploads\/2015\/09\/11180115\/feed-feature.jpg","datePublished":"2015-09-16T13:00:44+00:00","dateModified":"2015-09-18T19:53:07+00:00","author":{"@id":"http:\/\/localhost:8080\/blog\/#\/schema\/person\/96a17bf90b1201fdabb0dce65f9e28ed"},"description":"Activity streams make it easy for users to engage with your app every time they open it. This is everything you need to know to get started.","breadcrumb":{"@id":"https:\/\/thinkapps.com\/blog\/development\/activity-stream-news-feed-complete-guide\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/thinkapps.com\/blog\/development\/activity-stream-news-feed-complete-guide\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/thinkapps.com\/blog\/development\/activity-stream-news-feed-complete-guide\/#primaryimage","url":"https:\/\/d1vqbpto5tbbz0.cloudfront.net\/blog\/wp-content\/uploads\/2015\/09\/11180115\/feed-feature.jpg","contentUrl":"https:\/\/d1vqbpto5tbbz0.cloudfront.net\/blog\/wp-content\/uploads\/2015\/09\/11180115\/feed-feature.jpg","width":1658,"height":841,"caption":"Activity Stream - How to Build One into Your App"},{"@type":"BreadcrumbList","@id":"https:\/\/thinkapps.com\/blog\/development\/activity-stream-news-feed-complete-guide\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"http:\/\/localhost:8080\/blog\/"},{"@type":"ListItem","position":2,"name":"The Essential Guide to Building an Activity Stream into Your App"}]},{"@type":"WebSite","@id":"http:\/\/localhost:8080\/blog\/#website","url":"http:\/\/localhost:8080\/blog\/","name":"Build Blog by ThinkApps | Content on Entrepreneurship, Mobile Apps, Web Platforms and more","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"http:\/\/localhost:8080\/blog\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"en-US"},{"@type":"Person","@id":"http:\/\/localhost:8080\/blog\/#\/schema\/person\/96a17bf90b1201fdabb0dce65f9e28ed","name":"Katelan Cunningham","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"http:\/\/localhost:8080\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/14ad919b8cf2e2495cd63c74977ee08a?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/14ad919b8cf2e2495cd63c74977ee08a?s=96&d=mm&r=g","caption":"Katelan Cunningham"},"description":"Katelan is a writer who covers technology, startups, and design. She likes discovering how innovation is constantly impacting our daily lives. Katelan lives in Los Angeles by way of The South.","sameAs":["http:\/\/katelancunningham.com\/","https:\/\/www.linkedin.com\/in\/katelancunningham","https:\/\/x.com\/kalivia"],"url":"https:\/\/thinkapps.com\/blog\/author\/katelan\/"}]}},"_links":{"self":[{"href":"https:\/\/thinkapps.com\/blog\/wp-json\/wp\/v2\/posts\/5491"}],"collection":[{"href":"https:\/\/thinkapps.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/thinkapps.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/thinkapps.com\/blog\/wp-json\/wp\/v2\/users\/29"}],"replies":[{"embeddable":true,"href":"https:\/\/thinkapps.com\/blog\/wp-json\/wp\/v2\/comments?post=5491"}],"version-history":[{"count":59,"href":"https:\/\/thinkapps.com\/blog\/wp-json\/wp\/v2\/posts\/5491\/revisions"}],"predecessor-version":[{"id":5656,"href":"https:\/\/thinkapps.com\/blog\/wp-json\/wp\/v2\/posts\/5491\/revisions\/5656"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/thinkapps.com\/blog\/wp-json\/wp\/v2\/media\/5545"}],"wp:attachment":[{"href":"https:\/\/thinkapps.com\/blog\/wp-json\/wp\/v2\/media?parent=5491"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/thinkapps.com\/blog\/wp-json\/wp\/v2\/categories?post=5491"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/thinkapps.com\/blog\/wp-json\/wp\/v2\/tags?post=5491"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}