Készítsen egy Instagram feed-alkalmazást csak javascript-tel (az Expo és a React Native használatával)
Már egy ideje bele akarok lépni a mobil fejlesztésbe, de minden alkalommal, amikor elkezdek valami oldalt építeni, ugyanazokkal a bosszantó problémákkal foglalkozom:
- Időt pazarolok unalmas dolgokra. A hello world alkalmazás létrehozásához egy csomó kazánlemez-kód és véletlenszerű telepítés szükséges
- Az internetes tudásom egyikét sem továbbítom. Az Android teljesen különbözik az iOS-től, és mindkettő teljesen különbözik az internetről.
Néhány internetes böngészés után úgy tűnt, hogy a Facebook megoldotta ezt a problémát a React Native (a React.js alapú natív alkalmazások készítésére szolgáló könyvtár) segítségével, de kipróbálás után azt találtam, hogy a beállítás ugyanolyan unalmas, mint korábban. A fő probléma továbbra is fennállt: el kellett írni egy csomó kazánlemez Java / C # kódot.
Készen voltam ahhoz, hogy mobiltelefonon felépüljön, de találtam valamit, amit Expo-nak hívtak. Az Expo-nak van néhány könyvtára és eszköze, amelyek néhány értelmes módon épülnek a React Native sikeréhez:
- Azonnal felállhat és fut, anélkül, hogy bármit letöltené
- Az önálló alkalmazások 100% -ig készíthetőek javascript-ben
- A csomaghoz mellékelt apis, amely leegyszerűsíti az alkalmazások általános feladatait
Legutóbbi alkotásaim egy Instagram feed alkalmazás, amelyet készíteni fogunk. Követheti az expo snack-t (webes felület az expo-val való játékhoz). Megnézheti a forrást a githubon, vagy megnézheti a video bemutatóomat. Kezdjük el.

Magas szinten láthatjuk, hogy az alkalmazás áll hozzászólások listáját, a bejegyzés metaadatait és végül a hozzászólásokat. Az Instagram api-t kell felhasználnunk ennek az információnak a beszerzésére, majd listás formátumban megjeleníteni.
Állítsunk be egy Instagram kliens alkalmazást, hogy api kéréseket tehessünk.

Az ügyfélalkalmazás létrehozásához szükséges információk kitöltése után törölje a jelölőnégyzetet a implicit OAuth letiltásához. Demó alkalmazásunk egyszerűsége érdekében szerver oldali kód nélkül megkapjuk a hozzáférési jogkivonatot.
Most kattintson az Ügyfelek kezelése elemre, és kezeli az újonnan létrehozott ügyfelet. Kattintson a Biztonság elemre, és írjon be minden URL-t az 'érvényes átirányítás' mezőbe (én megtettem a http://www.google.com címet).
Majdnem kész. A hozzáférési jogkivonat megszerzéséhez api hívást kezdeményezünk az Instagram hitelesítési API segítségével. Az api átirányít minket a megadott url-hez, de a hozzáférési jogkivonatunkkal, mint url-paraméterrel. Íme, amit be kell illesztenie a böngészőbe:
https://api.instagram.com/oauth/authorize/?client_id=CLIENT-ID&redirect_uri=REDIRECT-URI&response_type=token&scope=public_content
Ahol a CLIENT-ID és az REDIRECT-URI a megfelelő értékek. Miután jóváhagyta az alkalmazások hozzáférését Instagram-fiókjához, átirányítani kell. Itt megragadom a hozzáférési jogkivonatomat (kérjük, hozzon létre egy egyedi alkalmazást az alkalmazásához).

Szép. Végül megkezdhetjük a kódolást.
Íme a váz minden Expo projekthez:
importálja a React, {Component} elemet a 'react' -ből; {Szöveg, nézet, stíluslap} importálása a „reagált natívból”;
export alapértelmezett osztály App kiterjeszti a {render () {return ( Szia )}}
const stílusok = StyleSheet.create ({})
A html stílusú címkéket JSX-nek hívják, a React egyik jellemzője. Ezt felhasználhatjuk az elrendezés meghatározására és a javascript logika beágyazására.
Importálhat néhány további komponenst a React Native és az Expo-ból.
- A FlatList összetevő lesz a felhasználói felület fő építőeleme, mivel az egyes elemeket a listában renderItem függvény meghívásával jeleníti meg.
- Az AppLoading arra szolgál, hogy megmutatja a felhasználónak egy betöltési ikont, miközben alkalmazásunk részeit ábrázoljuk (különben egy üres képernyő jelenik meg, amely villogni kezd, és a betöltött tartalmat megmutatja).
- A StyleSheet úgy működik, mint egy css fájl, ahol stílusokat alkalmazhatunk az alkalmazások nézeteihez
Szükségünk lesz továbbá hozzáférési tokenre és valahol az egyes bejegyzésekre vonatkozó adatok tárolására. A React Natívban ezt valami állapotnak nevezzük. Az UI-hez hozzáférni kívánt adatokat itt kell tárolni. Ez kényelmes, mert amikor az állapot megváltozik, alkalmazásunkat újratervezzük.
import React, {Component} az 'react' importálásból {Szöveg, Nézet, StyleSheet, Kép, Méretek, FlatList,} az 'react-native' importálásból {Constants, AppLoading} az 'expo'
access_token = '6626870867.cbba754.83fa37c865314df8be5c52347e3e4987'
állapot = {betöltve: hamis, adatok: null, megjegyzések: [],}
export alapértelmezett osztály App kiterjeszti a {render () {return ( this.createPost (elem, index)} keyExtractor = {(elem) => item.id} /> )}}
const stílusok = StyleSheet.create ({tároló: {flex: 1, alignItems: 'center', paddingTop: Constants.statusBarHeight, backgroundColor: '# ecf0f1',}})
A FlatList adatprofilja egy tömb, ahol minden elem paraméterként kerül továbbításra a renderItem függvényre. Ebben a tömbben tároljuk Instagram-üzenetünket.
Tehát használjuk az access_token használatával a postai adatok beszerzéséhez. A fetch api segítségével GET kérést küldünk az Instagram api végpontjára. Ezután tároljuk az értékeket alkalmazásunk állapotában.
async fetchFeed () {hadd válasz = várjon letöltést ('https://api.instagram.com/v1/users/self' + '/ media / Recent /? access_token =' + this.access_token) hadd posts = várjanak a választ. json () hagyja megjegyzéseit = várja meg ezt.makeCommentsList (posts.data)
this.setState ({adatok: posts.data, kommentárok: kommentárok, betöltve: true})}
Megvan a legutóbbi hozzászólásaink listája, de minden hozzászóláshoz meg kell szereznünk a megjegyzések és a kapcsolódó metaadatok listáját. Ez azt jelenti, hogy egy sor hálózati kérést készítünk, amelyek helytelen sorrendben térhetnek vissza. A terv ennek kezelése egy olyan ígéret-sorozat visszaadása, amely megoldódik, amikor a hozzászólások megjegyzéseit lekérik. Takaríthatunk meg bizonyos töltési időt azáltal is, hogy nem kérünk, amikor a bejegyzés nem rendelkezik megjegyzésekkel, és egyszerűen megmutatjuk a "Nincs hozzászólás!"
async makeCommentsList (hozzászólások) {hagyjuk postsArray = posts.map (async (post) => {hagyjuk postId = post.id
if (post.comments.count === 0) {return ( Nincs hozzászólás! ) } más {
hadd válasz = várjon lekérést ('https://api.instagram.com/v1/media/' + postId + '/ megjegyzések? access_token =' + this.access_token)
hagyjuk kommentárok = várjunk válasz.json () hagyjuk kommentárokArray = comments.data hagyjuk kommentárokList = commentsArray.map (commentInfo => {visszatérés ( {CommentInfo.from.username} {CommentInfo.text} )})
return commentsList}
})
postsArray = várja meg az Promise.all (postsArray) return postsArray}
Hozzáadtunk némi stílust, hogy a megjegyzések szépnek tűnjenek:
const stílusok = StyleSheet.create ({tartály: {flex: 1, alignItems: 'center', paddingTop: Constants.statusBarHeight, backgroundColor: '# ecf0f1',}, megjegyzés: {flexDirection: 'row', padding: 10, paddingLeft : 15, borderBottomWidth: 1, borderColor: '# d8d8d8',}, commentText: {paddingRight: 15, fontWeight: 'bold',}})
Most, hogy megkaptuk az összes megjegyzésünket és adatainkat, el kell készítenünk az ütemtervet és feltöltenünk azt a kapott adatokkal. A createPost funkció ezeket az értékeket használja a hozzászólás, metaadatok és megjegyzések megjelenítésére.
createPost (postInfo, index) {let imageUri = postInfo.images.standard_resolution.url let username = postInfo.user.username felhasználónév let numLikes = postInfo.likes.count
Visszatérés (
{felhasználónév} {numLikes + (numLikes! == 1? 'szereti': 'tetszik')}
{This.state.comments [index]} )}
A imageUri, a felhasználónév és a numLikes mind a visszaadott JSON-ból származnak, a letöltési kérésünkről az Instagram api-re. Példák a visszatérési értékekre az Instagram fejlesztői dokumentumokban találhatók.
Még egyszer hozzáadunk némi stílussal a stíluslapunkat, hogy üzenetünk megjelenése díszes legyen.
kép: {szélesség: Dimensions.get ('ablak'). szélesség, magasság: Dimensions.get ('ablak'). szélesség,}, info: {flexDirection: 'sor', SelgitusContent: 'térköz', padding: 10, paddingLeft: 15, paddingRight: 15, borderBottomWidth: 1, borderColor: '# d8d8d8',}, infoText: {fontSize: 16, fontWeight: 'bold',}
Néhány befejező elem hozzáadásához engedje le az Instagram indulási információinkat, amikor az alkalmazás elindul, és megmutatja a betöltési ikont az optimális felhasználói élmény érdekében.
komponentDidMount () {this.fetchFeed ()}
render () {if (! this.state.loaded) {return ( )}
Visszatérés ( this.createPost (elem, index)} keyExtractor = {(elem) => item.id} /> )}
És éppen így van! Egy mobil Instagram feed-néző ~ 150 sorban. Itt megtekintheti a teljes, működő snack-példát.
Mivel ezt az oktatást telepítés nélkül tervezték, úgy nem fejeztük be az önálló Android vagy iOS alkalmazás létrehozásának folyamatát. Szerencsére csak pár lépésre vagy.
- Győződjön meg arról, hogy van Apple Developer és Google Play fiókja.
- Töltse le az Expo XDE eszközét, és kattintson a Snack 'exportálás XDE-re' elemére.
- Kövesse az Expo önálló alkalmazásoldalán található építkezési utasításokat (főleg metaadatok hozzáadása az alkalmazáshoz)
- Gratulálunk! Ön készített egy natív alkalmazást iOS és Android számára