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

viewpay-react-native

v1.0.9-f

Published

Ce document a pour objectif de vous guider dans la mise en place du SDK ViewPay dans votre application React natif. Pour rappel, Viewpay est une solution de micro-paiement par l'attention publicitaire, qui permet à l'utilisateur de débloquer un contenu pr

Downloads

105

Readme

ViewPay-React-Native : Guide de démarrage

Ce document a pour objectif de vous guider dans la mise en place du SDK ViewPay dans votre application React natif. Pour rappel, Viewpay est une solution de micro-paiement par l'attention publicitaire, qui permet à l'utilisateur de débloquer un contenu premium en regardant une publicité. Viewpay a pour vocation d'être une alternative à d'autres options pour débloquer un contenu premium, et ne doit pas être installé comme seule option d'un paywall.

Voici un exemple de déblocage d'article avec Viewpay :

sample

Prérequis

  • Node JS

Installation du SDK

  • Entrer dans le repertoire du projet avec laquel vous voulez intergrer Viewpay.
  • Installer le module "viewpay-react-native" avec la commande :
npm install viewpay-react-native
  • Maintenant, il faut installer les dependances de viewpay, si vous avez déjà utilisé ces librairies alors leur installation ne sont pas obligatoire :
npm install react-native-webview 
npm install @react-native-async-storage/async-storage
npm install axios
npm install uuid
  • Si vous avez besoin de builder votre application avec ios alors aller dans le dossier ios et mettre à jour les dependaces pods avec la commande :
cd ios
pod install
  • Si vous avez besoin de builder votre application avec android alors aller dans le dossier android et mettre à jour les dependaces gradle avec la commande :
cd android
./gradew build

Utilisation du SDK

Aller dans le tsx dans lequel vous voulez integrer viewpay, et importer les composants Viewpay.

import Viewpay from 'viewpay-react-native';
import { ButtonVP,ViewpayHandle } from 'viewpay-react-native';
  • Maintenant vous pouvez utiliser le composant Viewpay, les parametres marqués par * sont obligatoires:

Composant 1 : Viewpay

<Viewpay
    siteId="1672e275c4ee7f34"
    readyVP={ready}
    checkVideoErrorVP={checkVideoError}
    checkVideoSuccesVP={checkVideoOk}   
    closeAdsVP={closeAdsVP}
    completeAdsVP={completedVP}
    errorVP={onErrorVP}
    withLog={false}
    ref={ref} 
/>

Parametres :

  • siteId * (string) : Id de l'editeur, fourni par Viewpay

  • readyVP * (function) : fonction callback, appelée lorsque ViewPay est prêt.

  • checkVideoErrorVP (function) : fonction callback, appelée lorsque le checkVideo repond KO

  • checkVideoSuccesVP (function) : fonction callback, appelée lorsque le checkVideo repond OK

  • closeAdsVP (function) : fonction callback, appelée lorsque le cadre ViewPay est fermé.

  • completeAdsVP (function) : fonction callback, appelée lorsque le parcours est terminé, et le contenu peut être debloqué

  • errorVP (function) : fonction appelée lorque viewpay rencontre une erreur pendant le parcours.

  • withLog (boolean) : pour activer l'affichage de log pour test, par défaut false

  • ref : reference pour appeler les fonctions utils du ViewPay.

  • Vous pouvez personnaliser les 5 fonctions : checkVideoErrorVP, checkVideoSuccesVP, closeAdsVP, completeAdsVP, errorVP

Composant 2 : ButtonVP

<ButtonVP  onPress={runOpenCadre}/>

Parametres :

  • onPress * (function) : fonction appel lors du clique

Composant 4 : ViewpayHandle

 const ref = useRef<ViewpayHandle>(null);

//fonction utilise du viewpay
const runCheckVideo = () => {
    if (ref.current) {
      setLoading(true)
      ref.current.checkVideo();
    }
};

const runOpenCadre = () => {
    if (ref.current) {
      setLoading(true)
      ref.current.openCadre();
    }
};

  <Viewpay
    siteId="1672e275c4ee7f34"
    readyVP={ready}
    checkVideoErrorVP={checkVideoError}
    checkVideoSuccesVP={checkVideoOk}   
    closeAdsVP={closeAdsVP}
    completeAdsVP={completedVP}
    errorVP={onErrorVP}
    withLog={false}
    ref={ref} 
/>

Vérifier la disponibilité de campagnes

La fonction callback readyVP est appelée lorsque le SDK ViewPay est prêt. Alors la fonction ref.current.checkVideo() doit être appelée, elle permet la vérification de la disponibilité d'au moins une vidéo publicitaire. S'il des publicités sont disponibles, alors la fonction callback checkVideoSuccesVP() est appelée. Dans le cas contraire, la fonction callback checkVideoErrorVP() est appelée.

Présenter la publicité

A partir du résultat de l'appel du checkVideo, vous êtes en mesure de savoir si des publicités sont disponibles pour valider la transaction via ViewPay. Pour présenter la publicité vous pouvez appelé la fonction : ref.current.openCadre().

Récuperation état du capping

A partir du résultat de l'appel du checkVideo, vous êtes en mesure de savoir si des publicités sont disponibles pour valider la transaction via ViewPay. Pour présenter la publicité vous pouvez appelé la fonction : ref.current.getCappingRestant(), il retourne un tableau de deux valeurs dont l'index 0 est le nombre de vue effectué et l'index 1 le nombre de vue max à atteindre

Example


import Viewpay from 'viewpay-react-native';
import { ButtonVP,ViewpayHandle } from 'viewpay-react-native';

 const  ExempleComposant = {
    const ref = useRef<ViewpayHandle>(null);

    const [isCompleted, setCompleted] = useState(false);
    const [isNoAds, setNoAds] = useState(false);
    const [capping, setCapping] = useState("");
    
    //fonction util du viewpay
    const runCheckVideo = () => {
        if (ref.current) {
          setLoading(true);
          ref.current.checkVideo();
        }
    };

    const runOpenCadre = () => {
        if (ref.current) {
          setLoading(true);
          ref.current.openCadre();
        }
    };
    
    //fonction callback
    const ready = () => {
      console.log('SDK Viewpay ready !');
      runCheckVideo();
      ref.current?.getCappingRestant().then((value:number[])=>{
        setCapping(value[0] + "/" + value[1]);
      })
    }

    const checkVideoError = () => {
        console.log('No more ads');
        setNoAds(true);
        setLoading(false);
    }

    const checkVideoOk = () => {
        console.log('Ads exists');
        setLoading(false);
        runOpenCadre();
    }
    const closeAdsVP = () => {
        console.log('Close ViewPay');
    }

    const completedVP = () => {
        console.log('Transaction effectuée avec success');
        setLoading(false);
        ref.current?.getCappingRestant().then((value:number[])=>{
          setCapping(value[0] + "/" + value[1]);
          setCompleted(true);
        })
    }

    const onErrorVP = (code:number,message:string) => {
        console.log('Error sur VP code :'+code+', message : '+message);
    }

    return (

         <View style={styles.sectionContainer}>
          <Text style={styles.sectionTitle}> Capping : {capping}</Text>
          <Text style={styles.sectionTitle}> La Guerre en Ukraine : Conflit Persistant et Perspectives d'Espoir</Text>

          <Text style={styles.sectionDescription}>
          Depuis plusieurs années, la situation en Ukraine continue de captiver l'attention du monde entier alors que le pays lutte contre un conflit armé dévastateur. Depuis le début des hostilités en 2014, 
          
          
            </Text>
            
            <Viewpay
              siteId="1672e275c4ee7f34"
              checkVideoErrorVP={checkVideoError}
              checkVideoSuccesVP={checkVideoOk}   
              closeAdsVP={closeAdsVP}
              completeAdsVP={completedVP}
              errorVP={(code: number,message: string)=> onErrorVP(code, message)}
              withLog={false}
              ref={ref} 
            />

            {!isCompleted && existAds && (<ButtonVP  onPress={runOpenCadre}/>)}

            {isNoAds && (
                  <Text style={styles.sectionDescription}>
                      No more ADS
                </Text>
              )
            }

            {isCompleted && (
              <Text style={styles.sectionDescription}>
                les Ukrainiens ont dû faire face à des défis humanitaires sans précédent, tout en tentant de préserver leur souveraineté et leur intégrité territoriale. Le conflit, qui oppose les forces ukrainiennes aux séparatistes soutenus par la Russie dans l'est du pays, a déjà coûté la vie à des milliers de personnes et déplacé des millions d'autres. Les combats sporadiques persistent malgré les tentatives de médiation et les accords de cessez-le-feu négociés par la communauté internationale.
            </Text>
           )}
        </View>
    )


const styles = StyleSheet.create({
  sectionContainer: {
    marginTop: 32,
    paddingHorizontal: 24
  },
  sectionTitle: {
    fontSize: 24,
    fontWeight: '600',
  },
  sectionDescription: {
    marginTop: 8,
    fontSize: 18,
    fontWeight: '400',
  },
  highlight: {
    fontWeight: '700',
  },
});