npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

react-native-outbrain-widget

v1.1.5

Published

Outbrain content recommendation implementation for React Native.

Downloads

4

Readme

react-native-outbrain-widget

Getting started

$ npm install react-native-outbrain-widget --save

Usage

import { OutbrainList, OutbrainHeader } from 'react-native-outbrain-widget';

Outbrain recommendations

This library allows you to create custom layouts that match your app. Before proceeding, please review Outbrain Developer Center to get a better understanding of the requirements.

1. Create your component

Your component will have access to the following properties, under the content props:

{
  "on-viewed": [
    "https://log.outbrainimg.com/loggerServices/log-viewability?requestId=a6f82799affc6e8b2907023821678286&position=0"
  ],
  "source_name": "CNN",
  "same_source": "false",
  "source_display_name": "CNN",
  "pc_id": 136178592,
  "adv_name": "Selfserve_meden",
  "publish_date": "2019-09-08 00:00",
  "orig_url": "https://edition.cnn.com/2019/09/08/tennis/bianca-andreescu-us-open-serena-williams-tennis-spt-intl/index.html",
  "rec-cats": [
    1913
  ],
  "ads_type": 1,
  "rec_en_did": "bjVQMWy1_aVKJgzIIM8ftQ",
  "url": "https://paid.outbrain.com/network/redir?p=DIbkcScn1O1Wt6ogzQMhyihdL7g-DYWZ3oynJ_2J3u-05wOW9jT_PIQ31Sxmtrm32wErwBqJBTTQoe66eIp6RoAyvofDbz29te1xnFuYbB93Gb8BvpS04Rt4n_x4eaSA3ze6oV_Il1YwJ4AQ_nl-wUi2wbuKfeFRWSvLBao_0op2fwxUIdHGpF7UAC_bKcVxkhMejRODEmaLXF4bi9c2sVkOW9pPElz94HUo6pRexQdaa-fTz6DQEspLnjd5cbzBp6bKLDUC8gmt_P9v04VCvApW9CF1gDFAZYO8KR0-ianewYxMFR24Dal6jFEmwsTiDBMPLi29FFuhuuRHv3oZchR6CqxHoTMZJT8kgAfY4Fmz19jO7wt8ol3-Biwyb6fR14lBnbvUqXjNFr5g9cGdIvmGp3gztstZJb45PEIbuY1oX-6FuzZCHZhnQxef9aCOqs4kSv-3OdrJbwg9nDU1FwEKHzt3w7KsbsPyxDfXavLwwp1FzPtaDbb_VKHFnexR4Y0bnoKEYI-fAyuX0TMa3cFljYsaQQu3fW4pweO4BrHrZ7g17Td9JEsD2W3Vg7H3ZkZXKWOsjFsv5OLbUZrOOl4zk4y0iLkYAewRKaJOCUhnjmqLNLcWRHdrNjHe64H3zeWy7RsKQgRKA_oOHb6ah7wjeU7tH0mB9zykMWifXIz6SFK6Q3iGO0LZ4XXEUg6nNFKz5EWiM4ud_cn8kEvQkbOgl46nWoq-pPriiWw5JgPB4tZclvq3-p694xd8c0XqLTfd3TGccl7Gn-6YSmVchTLnnbNCw-uJ526Jb-DbTuMh_tp4WfeH3xyvAtbjze4EjiKc8CjcJGH3EpTRDLl3byfd13Ra1VrS0EwgcsMUpDEWfQri4lcIOsT8Fu3BpJRFaWlMe8AZ2dUVTR3IqVQ8pthm7shE6j2u_4NzkNRX5Oq8ztyv8rA5yQB7tfo5cZobAXQoGGwzLw23KoEykVx2dalyXYhqccYGLQVpcrpHQ_-MklDnSyuwFn4gbv0BXjHW7Dj9YQUcysJuf5v5lrfgNmctJCZwQLt6CDjQLM3ZOeHv0X_VGdgS6cHAOmelt3-oNm-BNRM2zjy1dW_YIiR2KH1yq3nkk8IEvwBC2DH_esh-XomHwMqRC7Y1uc9DamWUCCcWt0uGk2XhO9DkZl0DpRL5-HfYIvFtT2pTTAgDtyxoB9m7H-yfbdszOwsMZEBcwZ3ey2ivohdimhwJcZGM5ETnVn5Gf2XBgkauRpHiZ87gJlQYNizTjK3XDsS5rRUT&c=80f07eef&v=3",
  "author": "",
  "content": "Bianca Andreescu: How a fake check inspired the US Open champion",
  "pc_cmp_id": 1002332188,
  "pixels": [
    "https://www.pixel1.com?obRequestId=HBanhEIY3a_2mWt3Ysg7Ke34n8k2QVwD-3FLVEeG0gNoP1boaU8-J45L_2pX3KQp&obTimestamp=1568105594278"
  ],
  "pos": "0",
  "ttid": 3,
  "jsTrackers": [
    "https://cdn.doubleverify.com/dvtp_src.js?obRequestId=HBanhEIY3a_2mWt3Ysg7Ke34n8k2QVwD-3FLVEeG0gNoP1boaU8-J45L_2pX3KQp&obTimestamp=1568105594278"
  ],
  "advId": "13604",
  "thumbnail": {
    "url": "https://images.outbrainimg.com/transform/v3/eyJpdSI6IjZjM2JlNmVjZDY5Nzc5Yjk1NzNkMTVhNGE2NWQ1Yzk1ODAzODdlNjk0OWI3MGYzNDVkZWRhYTY0YTA1M2QxOWIiLCJ3IjoxNTAsImgiOjE1MCwiZCI6MS41LCJjcyI6MCwiZiI6MH0.jpg",
    "width": 150,
    "height": 150,
    "imageImpressionType": "DOCUMENT_IMAGE"
  }
}

In addition, you'll have access to the following component:

  • OutbrainHeader for displaying Outbrain-supported Opt-Out.

Please ensure you've reviewed Outbrain's instructions to get a better understanding of each of these components and how you should use them.

Example component
export class OutbrainView extends Component {
  _onPressButton = () => {
    if (!this.props.content.url) {
      return null;
    }
    Linking.openURL(this.props.content.url);
  };

  render() {
    if (!this.props.content) {
      return null;
    }

    return (
      <View>
        <TouchableOpacity onPress={this._onPressButton}>
          <View>
            <View>
              <Image
                source={{ uri: this.props.content.thumbnail.url }}
              />
            </View>
            <View>
              <Text>{this.props.content.content}</Text>
            </View>
            <View>
              <Text>
                {this.props.content.source_name}
              </Text>
              <Text>
                {this.props.content.publish_date}
              </Text>
            </View>
          </View>
        </TouchableOpacity>
      </View>
    );
  }
}

2. Inject your component into OutbrainList as a renderItem function

OutbrainList has the following props:

  • renderItem - The item to render for each recommendation. This is your component built in step 1.
  • partnerKey - Unique partner key, provided by Outbrain.
  • permalinkURL - The permalink for the currently displayed content, no need to URL encode, the library does that for you.
  • enableTestMode - While you’re developing, we recommend that you use test mode. This will prevent any clicks and impressions from impacting the Outbrain system while testing and developing. Please remember to remove this parameter before releasing to production.
  • setSecured - For HTTPS support.
  • widgetId - The ID of the widget, used for reporting on activity. Your Outbrain Account Manager will provide you with the value for this parameter. Widget_IDs have a specific number of recommendations and image size associated with them.
  • widgetIndex - You can skip this as the library will auto index the widgets. Otherwise overwrite it with the value that represents the current position of the widget relative to other widgets on the page: The first unit on page will have idx=0 while the second unit will have idx=1 and so on. For pages/views with only one widget installed, use idx=0 for each request.
  • uniqueUserId - A unique user ID that identifies the user during the application session. This must be provided by the hosting application, and can take any type of value or format. This functions similarly to user identifying cookies on the web. See User Opt-Out instructions.
  • location - The 2 letter country code of the user’s location (ex. “us”).
  • dataSource - You can fetch the content separately and pass it in to the list yourself. This will ignore your user key and will not fetch the content from the API.
  • maxItems - Use this to concatenate the amount of items you want to display, by default Outbrain displays all items returned from the API.
  • onContentLoaded - You can add an event listener for when the content is loaded.
  • onContentFailedToLoad - You can add an event listener for when the content failed to load.
import { OutbrainList } from 'react-native-outbrain-widget';

class myItemView extends React.Component {
 ...
}

class App extends React.Component {
  render() {
    return (
      <ScrollView>
          <OutbrainList
            style={styles.listStyle}
            enableTestMode={true}
            setSecured={true}
            partnerKey="<partner key>"
            permalinkURL="<url representation of the page serving the recommendation>"
            widgetId="<widget id>"
            maxItems={4}
            renderItem={({ content, index }) => (
              <myItemView key={index} content={content} />
            )}
          />
      </ScrollView>
    );
  }
}

const styles = StyleSheet.create({
  listStyle: {
    flexDirection: 'row',
    flexWrap: 'wrap',
  },
});

3. Displaying Outbrain-supported Opt-Out

Outbrain serves personalized recommendations to users based on their history. Users must have the ability to opt out of Outbrain’s user tracking. More information can be found here. You can use the included OutbrainHeader component and style it to your liking.

Your component will have access to the following properties:

  • customStyles - Styles object that overwrites the styles of the header element

Example OutbrainHeader usage

import { OutbrainHeader } from 'react-native-outbrain-widget';

const styles = StyleSheet.create({
  headerHolder: {
    flexDirection: 'row',
    justifyContent: 'space-between',
  },
  headerTitle: {
    alignSelf: 'flex-start',
  },
  headerTitleText: {
    padding: 5,
    fontSize: 16,
  },
  headerLogosHolder: {
    justifyContent: 'flex-end',
    alignItems: 'flex-start',
    alignSelf: 'flex-start',
    flexDirection: 'row',
    flexWrap: 'wrap',
  },
  headerLogos: {
    padding: 10,
    flexDirection: 'row',
    alignItems: 'center',
  },
  headerLogosOutbrain: {
    width: 67,
    height: 12,
  },
  headerLogosAdChoices: {
    width: 10,
    height: 10,
    paddingLeft: 5,
  },
});

 <OutbrainHeader customStyles={styles} />