React-native-iap: Tidak bisa mendapatkan berbagai produk / langganan

Dibuat pada 19 Agu 2019  ·  31Komentar  ·  Sumber: dooboolab/react-native-iap

Versi react-native-IAP

3.3.9

Versi react-native

0.59.9

Platform yang Anda hadapi kesalahan (IOS atau Android atau keduanya?)

iOS dan Android

Perilaku yang diharapkan

Saya berharap bisa mendapatkan berbagai produk dan langganan yang dibuat di konsol Play dan Appstore.

Perilaku sebenarnya

Fungsi RNIap.getProducts dan RNIap.getSubscriptions selalu mengembalikan array kosong.

Lingkungan yang diuji (Emulator? Perangkat Nyata?)

Simulator iOS, emulator Android dan perangkat Android nyata

Langkah-langkah untuk mereproduksi perilaku

  1. Tambahkan produk di Konsol Google Play dan Apple Appstore Connect
  2. Saya menggunakan kode dari folder contoh
  3. Saya mengubah id produk / langganan

Saya memang menunggu lebih dari 24 jam. Saya juga membuat rilis Internal dan Alpha di Konsol Google Play, tetapi saya hanya mendapatkan kembali array kosong.

Saya kira saya agak tidak jelas kapan tepatnya saya harus mengharapkannya mulai bekerja. Misalnya, ketika pengujian Alfa Peluncuran saya masih Menunggu publikasi di Konsol Google Play, apakah itu berarti react-native-iap tidak akan berfungsi? Apakah saya harus menunggu hingga aplikasi dipublikasikan untuk mencobanya?

Saya juga tahu bahwa saya tidak akan dapat melakukan bahkan menguji pembelian pada simulator / emulator, tetapi haruskah getProducts / getSubscriptions berfungsi pada emulator atau apakah saya memerlukan perangkat nyata untuk mengujinya?

const itemSkus = Platform.select({
    ios: ['product_1'],
    android: ['1', '2']
});

const itemSubs = Platform.select({
    ios: ['subscription_1'],
    android: ['subscription_1', 'subscription_2']
});

let purchaseUpdateSubscription;
let purchaseErrorSubscription;

class App extends Component {
    constructor(props) {
        super(props);

        this.state = {
            productList: [],
            receipt: '',
            availableItemsMessage: ''
        };
    }

    async componentDidMount() {
        SplashScreen.hide();
        try {
            const result = await RNIap.initConnection();
            await RNIap.consumeAllItemsAndroid();
            console.log('result', result);
        } catch (err) {
            console.warn(err.code, err.message);
        }

        purchaseUpdateSubscription = purchaseUpdatedListener(async purchase => {
            console.log('purchaseUpdatedListener', purchase);
            if (purchase.purchaseStateAndroid === 1 && !purchase.isAcknowledgedAndroid) {
                try {
                    const ackResult = await acknowledgePurchaseAndroid(purchase.purchaseToken);
                    console.log('ackResult', ackResult);
                } catch (ackErr) {
                    console.warn('ackErr', ackErr);
                }
            }
            this.setState({ receipt: purchase.transactionReceipt }, () => this.goNext());
        });

        purchaseErrorSubscription = purchaseErrorListener(error => {
            console.log('purchaseErrorListener', error);
            Alert.alert('purchase error', JSON.stringify(error));
        });
    }

    componentWillMount() {
        if (purchaseUpdateSubscription) {
            purchaseUpdateSubscription.remove();
            purchaseUpdateSubscription = null;
        }
        if (purchaseErrorSubscription) {
            purchaseErrorSubscription.remove();
            purchaseErrorSubscription = null;
        }
    }

    goNext = () => {
        Alert.alert('Receipt', this.state.receipt);
    };

    getItems = async () => {
        try {
            const products = await RNIap.getProducts(itemSkus);            
            console.log('Products', products);
            this.setState({ productList: products });
        } catch (err) {
            console.warn(err.code, err.message);
        }
    };

    getSubscriptions = async () => {
        try {
            const products = await RNIap.getSubscriptions(itemSubs);
            console.log('Products', products);
            this.setState({ productList: products });
        } catch (err) {
            console.warn(err.code, err.message);
        }
    };

    getAvailablePurchases = async () => {
        try {
            console.info('Get available purchases (non-consumable or unconsumed consumable)');
            const purchases = await RNIap.getAvailablePurchases();
            console.info('Available purchases :: ', purchases);
            if (purchases && purchases.length > 0) {
                this.setState({
                    availableItemsMessage: `Got ${purchases.length} items.`,
                    receipt: purchases[0].transactionReceipt
                });
            }
        } catch (err) {
            console.warn(err.code, err.message);
            Alert.alert(err.message);
        }
    };

    requestPurchase = async sku => {
        try {
            RNIap.requestPurchase(sku);
        } catch (err) {
            console.warn(err.code, err.message);
        }
    };

    requestSubscription = async sku => {
        try {
            RNIap.requestSubscription(sku);
        } catch (err) {
            Alert.alert(err.message);
        }
    };

    render() {
        const { productList, receipt, availableItemsMessage } = this.state;
        const receipt100 = receipt.substring(0, 100);

        return (
            <View style={styles.container}>
                <View style={styles.header}>
                    <Text style={styles.headerTxt}>react-native-iap V3</Text>
                </View>
                <View style={styles.content}>
                    <ScrollView style={{ alignSelf: 'stretch' }}>
                        <View style={{ height: 50 }} />
                        <NativeButton
                            onPress={this.getAvailablePurchases}
                            activeOpacity={0.5}
                            style={styles.btn}
                            textStyle={styles.txt}
                        >
                            Get available purchases
                        </NativeButton>

                        <Text style={{ margin: 5, fontSize: 15, alignSelf: 'center' }}>
                            {availableItemsMessage}
                        </Text>

                        <Text style={{ margin: 5, fontSize: 9, alignSelf: 'center' }}>
                            {receipt100}
                        </Text>

                        <NativeButton
                            onPress={() => this.getItems()}
                            activeOpacity={0.5}
                            style={styles.btn}
                            textStyle={styles.txt}
                        >
                            Get Products ({productList.length})
                        </NativeButton>
                        {productList.map((product, i) => {
                            return (
                                <View
                                    key={i}
                                    style={{
                                        flexDirection: 'column'
                                    }}
                                >
                                    <Text
                                        style={{
                                            marginTop: 20,
                                            fontSize: 12,
                                            color: 'black',
                                            minHeight: 100,
                                            alignSelf: 'center',
                                            paddingHorizontal: 20
                                        }}
                                    >
                                        {JSON.stringify(product)}
                                    </Text>
                                    <NativeButton
                                        // onPress={() => this.requestPurchase(product.productId)}
                                        onPress={() => this.requestSubscription(product.productId)}
                                        // onPress={() => this.buyItem(product.productId)}
                                        // onPress={() => this.buySubscribeItem(product.productId)}
                                        activeOpacity={0.5}
                                        style={styles.btn}
                                        textStyle={styles.txt}
                                    >
                                        Request purchase for above product
                                    </NativeButton>
                                </View>
                            );
                        })}
                    </ScrollView>
                </View>
            </View>
        );
    }
}
📱 iOS 🙏 help wanted 🚶🏻 stale 🤖 android

Komentar yang paling membantu

Tentu saja Setelah dipublikasikan oleh google play store, saya akan konfirmasi di sini

MEMPERBARUI

Setelah aplikasi saya dipublikasikan di Google Play Store, pembelian muncul dan berfungsi. Perlu waktu 3 hari untuk menyetujui. Terima kasih kepada @jvandenaardweg

UPDATE 2

react-native-iap dapat bekerja di emulator android, jika emulator memiliki dukungan google play store.

Semua 31 komentar

Anda tidak perlu real device untuk menguji di ios untuk getProducts / getSubscription tetapi tidak di android . Untuk android Anda harus memiliki perangkat asli untuk membeli.

Untuk google, silakan baca panduan saya untuk menyelesaikan masalah Anda.
Anda sebenarnya tidak harus menerbitkan aplikasi ke playstore untuk pengujian tetapi Anda perlu mengunggah apk yang ditandatangani.

Saya juga memiliki masalah ini, saya sudah membuat produk di apel dan sepertinya saya tidak dapat mengaksesnya.

const itemSkus = Platform.select({
  ios: [
    'product1'
  ],
  android: []
});

RNIap.getProducts(itemSkus).then((products) => {
      console.log(products);  //<< returns empty array
}).catch((error) => console.log(error))

Apakah produk memerlukan waktu untuk mencerminkan pengalaman Anda?

Perjanjian, Pajak dan Perbankan semuanya aktif
"react-native-iap": "^ 3.4.0",
Dan dalam aplikasi sudah berstatus "Siap Dikirim"

@nateblog produk apa yang kamu buat? Langganan atau yang lainnya?

Selain itu, sudahkah Anda menambahkan pelokalan di App Store Connect untuk produk / langganan Anda? Jika demikian, coba tambahkan pelokalan yang Anda aktifkan di perangkat atau simulator. Saya ingat saya memiliki beberapa masalah dengan itu sebelumnya. Simulator dan perangkat lokal saya dalam bahasa Inggris, jadi saya hanya menambahkan pelokalan "Inggris (AS)" untuk langganan saya.

@jvandenaardweg - terima kasih atas tanggapannya, ya saya sudah menambahkan pelokalan karena status dalam aplikasi tidak akan disetel ke "Siap Kirim" jika saya melewati pelokalan. Saya menyetel lokalisasi ke "Inggris (AS)" karena perangkat yang saya gunakan menggunakan bahasa Inggris dan ya, produknya berlangganan.

MEMPERBARUI

Saya sudah memastikan saya mengaktifkan dalam aplikasi di bawah kemampuan dan menurunkan paket ke 2.4.0 tetapi masih hasil yang sama. . Saya tidak bisa mendapatkan produk, itu hanya mengembalikan array kosong.

Saya juga menautkan paket secara manual karena posting lain menyarankan untuk tidak menggunakan tautan react-native tetapi masih menghasilkan hasil yang sama. Saya menggunakan simulator dan perangkat nyata.

Maaf, sudah diselesaikan sekarang, masalahnya adalah ID bundel di xcode saya, saya menggunakan id bundel yang salah, semuanya berfungsi sekarang

Saya memiliki yang serupa, dan saya hanya perlu melakukan proses penautan perpustakaan secara manual. (ios)

Saya mengalami masalah yang sama, tidak memuat produk apa pun dari Itunes Connect, dan saya tidak yakin harus mulai mencari masalah dari mana. Aplikasi ini menggunakan versi lama RN: 0.43.4. Saya sudah mencoba versi 3.3.7, dan 2.5.5 dari RN-IAP. Haruskah saya menggunakan versi perpustakaan yang lebih lama karena saya menggunakan versi lama React-Native?

Sepertinya masalah yang sulit untuk dipecahkan karena tidak ada pesan kesalahan, hanya tidak ada data.

Maaf, sudah diselesaikan sekarang, masalahnya adalah ID bundel di xcode saya, saya menggunakan id bundel yang salah, semuanya berfungsi sekarang

Hai, @nateblog! Saya menghadapi masalah serupa: Saya mendapatkan array kosong untuk produk dan langganan dan saya telah membuat 2 item langganan dalam App Store Connect. Bisakah Anda menjelaskan apa yang salah dengan ID bundel Anda? Saya rasa saya tidak mengirimkan SKU item yang benar karena saya tidak dapat menemukan referensi tentang bagaimana mereka dibuat atau apa itu - apakah itu [Bundle Identifier]. [ProductId of the purchase item] atau hanya [ProductId dari item pembelian]?

Juga, saya ingin menambahkan bahwa saya memiliki Pengenal Bundel yang sedikit berbeda untuk skema rilis dan debug saya:

  • Rilis - 'domain.appName';
  • Debug - 'domain.appName.dev';
    Item pembelian dalam aplikasi yang telah saya buat terkait dengan versi produksi (yaitu rilis) aplikasi. Apakah itu berarti saya tidak dapat mengakses item tersebut dari aplikasi versi dev?

Saran apa pun akan sangat dihargai.

Saya memiliki yang serupa, dan saya hanya perlu melakukan proses penautan perpustakaan secara manual. (ios)

Anda menyelamatkan hari saya!

Saya telah mengintegrasikan react-native-iap dan mengunggah apk saya yang ditandatangani ke rilis beta di play store dan juga menambahkan satu paket berlangganan. Saya mencoba mendapatkan daftar langganan dengan ID langganan dalam mode debug yang selalu mengembalikan larik kosong. Bisakah saya benar-benar menguji langganan dalam mode debug?

@ShridharCodewave saya menghadapi masalah yang sama. tolong beri tahu saya jika Anda bisa menyelesaikan masalah :(

react-native-iap: 3.3.2

Saya menghadapi masalah yang sama di Android Emulator. Saya mengunggah apk ke Google Play Store ke Saluran Beta dan menambahkan produk.

image

Pertama, koneksi init kemudian saya mencoba untuk mengambil produk tetapi tidak ada yang ditampilkan di console.warn
Tidak ada hasil di sini
Tidak Ada Kesalahan di sini

@ismetsezer , seluruh penagihan Dalam Aplikasi untuk Android tidak akan berfungsi di emulator:

Anda tidak dapat menggunakan emulator untuk menguji Layanan Penagihan Google Play; Anda harus menginstal aplikasi Anda di perangkat untuk menguji Layanan Penagihan Google Play.
https://developer.android.com/google/play/billing/billing_testing

Anda membutuhkan perangkat nyata untuk itu.

Di iOS Anda dapat mengambil data langganan di simulator. Tetapi Anda tidak bisa membelinya, untuk itu Anda juga membutuhkan perangkat yang nyata.

Untuk komentar lain di atas: Pastikan juga versionName dan versionCode di android/app/build.gradle sama atau lebih tinggi dengan yang diunggah di Konsol Google Play.

Anda juga memerlukan aplikasi aktif yang ditinjau di jalur non-produksi, karena kebijakan ulasan baru Android:

Sebelumnya Anda dapat menguji aplikasi dengan mengupload versi "draf" yang tidak dipublikasikan. Fungsi ini tidak lagi didukung. Sebagai gantinya, Anda harus memublikasikan aplikasi Anda ke track pengujian tertutup atau terbuka. Untuk informasi selengkapnya, lihat Aplikasi Draf Tidak Lagi Didukung.
https://developer.android.com/google/play/billing/billing_testing

"Memublikasikan" dalam track pengujian tertutup / terbuka berarti harus melalui proses peninjauan baru Google Play. Yang bisa memakan waktu beberapa hari untuk aplikasi baru, dan hanya beberapa jam untuk aplikasi yang sudah ada.

Saya tidak tahu persis langkah yang saya lakukan, tetapi bagi saya ini bekerja secara lokal dengan perangkat Android. Jadi ini mungkin bukan masalah paket react-native-iap, tetapi lebih merupakan masalah konfigurasi.

Jika seseorang dapat mengkonfirmasi hal di atas, mungkin ada baiknya untuk memperbarui README tentang perubahan ini. Karena ini adalah sesuatu yang baru sejak bulan lalu.

Terima kasih @jvandenaardweg ketika saya beralih ke perangkat nyata, Ya Itu berfungsi dan koneksi berhasil tetapi seperti yang Anda katakan dan menurut tautan, saya harus menunggu aplikasi uji dipublikasikan di Saluran Beta karena array produk kosong

Senang mendengar @ismetsezer . Dapatkah Anda mengonfirmasi jika itu mulai bekerja untuk Anda dengan aplikasi pengujian yang telah ditinjau / dipublikasikan? Karena dengan begitu kita dapat memperbarui readme dengan informasi baru itu :-)

Tentu saja Setelah dipublikasikan oleh google play store, saya akan konfirmasi di sini

MEMPERBARUI

Setelah aplikasi saya dipublikasikan di Google Play Store, pembelian muncul dan berfungsi. Perlu waktu 3 hari untuk menyetujui. Terima kasih kepada @jvandenaardweg

UPDATE 2

react-native-iap dapat bekerja di emulator android, jika emulator memiliki dukungan google play store.

@kesepara Saya harus menunggu beberapa jam setelah menambahkan paket langganan baru di play store agar dapat muncul di perangkat.

Hai @ismetsezer dan @kesepara ,
Saya akan sangat menghargai masukan Anda tentang alur perkembangan Anda karena ada sesuatu yang masih belum jelas bagi saya.
Saya telah menyiapkan RN IAP untuk iOS dan sekarang berfungsi dengan baik.
Saya sekarang mulai melakukan bagian Android, dan saya telah menemukan di sini bahwa kita harus menggunakan APK bertanda tangan yang diunggah di jalur Tertutup (setidaknya) untuk dapat menguji fitur pembayaran.
Tetapi dalam komentar Anda, Anda mengatakan bahwa Anda telah dapat mengujinya di emulator Android, apakah itu benar?
Selanjutnya, jika kita harus menggunakan APK yang ditandatangani di store, bagaimana kita bisa melakukan debug?
Bantuan Anda akan sangat dihargai.

Hai @beeremy, terima kasih atas pendapat Anda yang baik. Anda harus menguji IAP di perangkat nyata atau emulator yang memiliki dukungan google play untuk mengambil produk. IAP telah berfungsi setelah saya menerbitkan aplikasi di Google Play Store, ini bisa saja berubah tetapi setidaknya Anda harus mengunggah atau memberikan draf di toko untuk menguji fitur ini. Tapi butuh 2 - 3 jam untuk bekerja.

Hai @ismetsezer , terima kasih atas tanggapan Anda.

Untuk siapa pun yang dapat berguna, saya dapat membuat konfigurasi debug yang berjalan setelah mengikuti rekomendasi ini: https://stackoverflow.com/questions/36113347/is-it-possible-to-debug-locally-google-plays -di-app-billing-in-android-studio

Saya dapat mengonfirmasi sebagai @ismetsezer bahwa langganan dan produk akan berfungsi di android setelah aplikasi dipublikasikan di konsol google play. Mencoba mendapatkan langganan / produk saat aplikasi belum dipublikasikan tidak akan berfungsi untuk android.

Di iOS, langganan dan produk berfungsi tanpa mempublikasikan aplikasi.

Halo, sepertinya tidak ada aktivitas terkait masalah ini akhir-akhir ini. Apakah masalah sudah diperbaiki, atau masih membutuhkan perhatian masyarakat? Masalah ini mungkin ditutup jika tidak ada aktivitas lebih lanjut yang terjadi. Anda juga dapat memberi label masalah ini sebagai "Untuk Diskusi" atau "Edisi pertama yang baik" dan saya akan membiarkannya terbuka. Terima kasih atas kontribusi Anda.

RN 0.59.1 di Android dev di sini dan saya menggunakan IAP versi 4.4.1

Bangunan saya saat ini berada di jalur Alfa. Setelah itu , saya membuat ulang seperti biasa di komputer saya dalam mode debug, dalam Platform.select ({}) saya menentukan ID langganan seperti di Konsol Play, dan saya memanggil getSubscriptions () tetapi saya menerima array kosong. Apakah ini karena ada di Alpha? Ada ide?

@edgaralienfoe apakah Anda mengaktifkan langganan di Konsol Google Play?

@acostalima itu harus diaktifkan. Saya berasumsi mungkin perlu beberapa hari untuk melakukannya, tetapi tetap tidak berhasil.

@edgaralienfoe Saya bertanya karena saya ingat ada opsi untuk mengaktifkan langganan secara eksplisit di Konsol Google Play dan, jika tidak aktif, langganan tidak akan muncul di aplikasi Anda. Namun, jika Anda berkata demikian, mungkin ada beberapa masalah lain.

@edgaralienfoe Apakah Anda menemukan solusinya? Mungkin versi aplikasi Anda harus lebih tinggi dari yang ada di track Alfa

@edgaralienfoe Apakah Anda menemukan solusinya? Mungkin versi aplikasi Anda harus lebih tinggi dari yang ada di track Alfa

Jalur alfa berfungsi dengan baik. Saya telah menguji IAP selama beberapa waktu sekarang dengan build yang diterapkan ke Alfa tanpa masalah. Track Internal, di sisi lain, tidak berfungsi.

Untuk semua orang yang mungkin mengalami masalah di sini, trik apa di iOS bagi saya adalah menautkan proyek secara manual seperti yang disarankan oleh @ Kuhne1 - ini berfungsi setelah membersihkan folder build dan menginstal Pod secara manual juga, semoga bermanfaat bagi siapa saja!

Halo, sepertinya tidak ada aktivitas terkait masalah ini akhir-akhir ini. Apakah masalah sudah diperbaiki, atau masih membutuhkan perhatian masyarakat? Masalah ini mungkin ditutup jika tidak ada aktivitas lebih lanjut yang terjadi. Anda juga dapat memberi label masalah ini sebagai "Untuk Diskusi" atau "Edisi pertama yang baik" dan saya akan membiarkannya terbuka. Terima kasih atas kontribusi Anda.

Menutup masalah ini setelah tidak aktif dalam waktu lama. Jika masalah ini masih ada di rilis terbaru, silakan membuat masalah baru dengan informasi terbaru.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat

Masalah terkait

hakkikonu picture hakkikonu  ·  4Komentar

jvandenaardweg picture jvandenaardweg  ·  4Komentar

coldfins picture coldfins  ·  3Komentar

sanilcgs picture sanilcgs  ·  3Komentar

ramondelmondo picture ramondelmondo  ·  4Komentar