React-native-iap: RNIap tidak berfungsi di Android tetapi berfungsi di iOS dengan kode yang sama

Dibuat pada 7 Jul 2020  ·  33Komentar  ·  Sumber: dooboolab/react-native-iap

Versi reaksi-asli-iap
4.4.7

Versi reaksi-asli
0.60.6

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

Perilaku yang diharapkan

     async componentDidMount() {
        try {
            const result = await RNIap.initConnection();
            await RNIap.consumeAllItemsAndroid();
            console.log('result', result);
            const products: Product[] = await RNIap.getProducts(itemSkus);
            this.setState({ products }, () => {console.log(this.state.products)});
        } catch (err) {
            console.warn(err.code, err.message);
        }

Perilaku yang diharapkan adalah daftar produk yang ditarik dari konsol permainan oleh .getProducts() yang dicetak di terminal

Perilaku sebenarnya
Janji tidak dikembalikan. Kesalahan 'penagihan tidak tersedia'

Lingkungan yang diuji (Emulator? Perangkat Nyata?)
Perangkat Nyata (Aplikasi sedang dalam produksi)

Langkah-langkah untuk mereproduksi perilaku
const itemSkus = Platform.select({ ios: [ 'com.example.1' ], android: [ 'com.example.1' ] });

     async componentDidMount() {
        try {
            const result = await RNIap.initConnection();
            await RNIap.consumeAllItemsAndroid();
            console.log('result', result);
            const products: Product[] = await RNIap.getProducts(itemSkus);
            this.setState({ products }, () => {console.log(this.state.products)});
        } catch (err) {
            console.warn(err.code, err.message);
        }
    this.purchaseUpdateSubscription = purchaseUpdatedListener(async (purchase: InAppPurchase | SubscriptionPurchase | ProductPurchase) => {
        console.log('purchaseUpdatedListener', purchase);
        const receipt = purchase.transactionReceipt;
        if (receipt) {
            try {
                // if (Platform.OS === 'ios') {
                //   finishTransactionIOS(purchase.transactionId);
                // } else if (Platform.OS === 'android') {
                //   // If consumable (can be purchased again)
                //   consumePurchaseAndroid(purchase.purchaseToken);
                //   // If not consumable
                //   acknowledgePurchaseAndroid(purchase.purchaseToken);
                // }
                const ackResult = await finishTransaction(purchase);
            } catch (ackErr) {
                console.warn('ackErr', ackErr);
            }

            this.setState({ receipt }, () => this.goNext());
        }
    },
    );

    this.purchaseErrorSubscription = purchaseErrorListener(
        (error: PurchaseError) => {
            console.log('purchaseErrorListener', error);
        },
    );
}
componentWillUnmount() {
    if (this.purchaseUpdateSubscription) {
        this.purchaseUpdateSubscription.remove();
        this.purchaseUpdateSubscription = null;
    }
    if (this.purchaseErrorSubscription) {
        this.purchaseErrorSubscription.remove();
        this.purchaseErrorSubscription = null;
    }
}

Sepertinya saya tidak tahu mengapa ini terjadi. Saya menggunakan kode persis ini untuk iOS dan berfungsi dengan baik. Saya telah menyiapkan semua produk di konsol bermain, menambahkan izin penagihan ke file manifes, dan menautkan paket IAP (Saya menggunakan AndroidX sehingga paket tersebut ditautkan secara otomatis). Saya masuk ke play store dan saya memiliki play store versi terbaru, tetapi initConnection() masih tidak berfungsi. Saya tidak tahu harus berbuat apalagi. Bantuan apa pun sangat dihargai! Terima kasih telah membaca.

🙏 help wanted 🤖 android

Semua 33 komentar

Apakah ini akan membantu?

Apakah ini akan membantu?

Sayangnya itu tidak membantu :(. Apakah ini ada hubungannya dengan migrasi AndroidX? Untuk beberapa alasan initConnection() tidak berfungsi dan saya tidak tahu alasannya.

@damialajogun Apakah Anda mengetahui apa yang salah? Saya memiliki kesalahan yang sama persis dan tidak mengerti dari mana asalnya... initConnection() tidak terdefinisi.

@hyochan Apakah Anda punya ide?

@damialajogun Apakah Anda mengetahui apa yang salah? Saya memiliki kesalahan yang sama persis dan tidak mengerti dari mana asalnya... initConnection() tidak terdefinisi.

Hei, tidak, aku belum mengetahuinya :(

Apakah Anda menambahkan <uses-permission android:name="com.android.vending.BILLING" /> ke file AndroidManifest.xml Anda?

@hakkikonu Ya saya punya

Dalam loggin kesalahan saya, saya dapat melihat kesalahan yang sama terjadi pada sebagian kecil pengguna saya di beberapa negara seperti AS dan Selandia Baru. Tampaknya terjadi sangat tidak konsisten sekalipun. Adakah ide apa yang bisa disebabkan oleh ini?

@joris1995 Saya juga memiliki masalah ini, sebagian kecil pengguna tidak dapat melakukan pembelian dalam aplikasi, kesalahannya adalah "Sku tidak ditemukan. Silakan ambil produk terlebih dahulu dengan memanggil getItems", tetapi sku ada karena dalam popup pembelian saya tunjukkan harga objek yang diambil dari getProducts, getItems bahkan tidak ada di API

apakah aplikasi google play store versi terbaru? Apakah masalah ini hanya terjadi pada ponsel Anda atau semua pengguna.

Anda juga dapat mencoba masuk dengan ke google play store dengan akun gmail yang berbeda.

pastikan untuk membersihkan layanan google play dan file cache aplikasi google play store dari pengaturan / aplikasi / google play di perangkat Anda.

Semua pengguna/akun/ponsel...

Bagi saya, Ini hanya sebagian dari pengguna saya. Tampaknya tidak ada faktor yang konsisten seperti negara, versi OS, atau produsen perangkat. Di BugSnag, ini menunjukkan kesalahan 'Penagihan tidak tersedia. Ini mungkin masalah dengan perangkat Anda, atau Play Store mungkin sedang down'. Hal ini bisa disebabkan oleh apa?

Anda harus mengirimkan versi beta sebelum dapat memuat pembelian dalam aplikasi dan Anda hanya dapat men-debugnya menggunakan versi rilis.

beta bukanlah suatu keharusan. juga menutup alpha tidak apa-apa

Saya juga memiliki masalah yang sama, saya bahkan telah mengirimkan beta dan disetujui 4 hari yang lalu

Jika saya mengerti apa yang Anda katakan, apakah initConnection() tidak berfungsi dalam pengujian tetapi dalam versi beta?

@Kamsou Ya, meskipun sebagian besar "getProducts()" yang tidak berfungsi dalam build debug.

Informasi lebih lanjut: https://medium.com/bleeding-edge/testing-in-app-purchases-on-android-a6de74f78878

Apa yang terjadi dengan saya adalah, ketika saya ingin melihat apakah pembelian telah dilakukan, saya melakukan:
RNIap.getPurchaseHistory()
Di iOs semuanya berfungsi normal.
Tetapi di Android saya memiliki satu kesalahan ini: "Kesalahan: E_IAP_NOT_AVAILABLE"
_Saya menggunakan emulator lokal_

``` const initilizeIAPConnection = async () => { await initConnection() .then(async (connection) => { consumeAllItemsAndroid(); await getItems(); console.log('IAP result', connection); }) .catch((error) => { console.warn( IAP ERROR ${error.code}`, error.message);
});
};

const getItems = async () => {
mencoba {
const subscriptions = menunggu getSubscriptions(itemSkus);
console.log('Produk', langganan);
setSubscriptions(langganan);
} tangkap (keliru) {
console.warn(err.code, err.message);
}
};
useEffect(() => {
initilizeIAPConnection();
}, []);

``` I just removed await for mengkonsumsiSemuaItemsAndroid(); `dan itu mulai bekerja

@rizshivalli Senang mendengarnya bekerja untuk Anda. Sayangnya, itu masih tidak berfungsi untuk saya ketika saya menghapus menunggu consumeAllItemsAndroid() . Masalah saya adalah initConnection() tidak berfungsi. Bagaimana Anda bisa membuat bagian itu bekerja?

@damialajogun saya menghapus try catch dan menambahkan .then dan .catch

@rizshivalli Mencobanya dan masih tidak berhasil untuk saya :(. Maaf untuk semua pertanyaan, tetapi apakah Anda dapat benar-benar melihat 'produk' dari bawah tercetak di terminal? Saya pikir masalah saya adalah tidak menarik semua produk saya yang dikonfigurasi di konsol bermain meskipun saya telah mengaturnya dan mereka aktif.
const getItems = async () => { try { const subscriptions = await getSubscriptions(itemSkus); console.log('Products', subscriptions);

@damialajogun Ya Ini berfungsi. Saya juga dapat menguji pembayaran di android juga. Sudahkah Anda merilis build ke alpha atau beta di android?

@rizshivalli Bukan alpha atau beta tapi saya sudah merilisnya di produksi jadi live di play store. Saya pikir selama itu di perangkat nyata (bukan emulator) itu harus berfungsi, sayangnya itu bukan untuk saya ....

Hai @rizshivalli pertanyaan singkat - apakah aplikasi Anda terdaftar sebagai gratis atau berbayar di Google Play? Milik saya gratis tetapi dengan pembelian dalam aplikasi (pengguna dapat mengunduh aplikasi secara gratis dan memilih untuk membeli yang tidak habis pakai di aplikasi) tetapi sekarang saya bertanya-tanya apakah itu harus terdaftar sebagai berbayar agar IAP berfungsi?

@damialajogun terdaftar sebagai gratis karena pengguna tidak perlu membayar untuk menginstal aplikasi

Pagi semuanya,
Apakah ada di antara Anda yang memiliki aplikasi Android yang berfungsi baik dengan pembayaran?
Karena dengan saya initConnection tidak berfungsi.

Ya, menggunakan versi terbaru. Saya tidak berpikir initConnection melakukan apa-apa, itu hanya memulai koneksi, maka Anda perlu mengambil produk

Adakah solusi untuk ini?
Bagi saya android crash sebelum meluncurkan aplikasi. Tapi Ios bekerja seperti yang diharapkan.
Tolong bantu

Saya menghadapi (mungkin) masalah yang sama.

Saya menambahkan dua langganan lagi ke aplikasi saya, tetapi hanya langganan lama yang berfungsi.
Ketika saya mencoba menunggu RNIap.getSubscriptions() saya mendapatkan "google menunjukkan bahwa kami memiliki beberapa masalah saat menghubungkan ke pembayaran"

Ketika saya mencoba RNIap.requestSubscription(subId, true) saya mendapatkan "Sku tidak ditemukan".

Sku terdaftar di google play dan idnya benar, periksa ulang itu. Diuji pada emulator dan perangkat nyata, menggunakan mode debug dan rilis.

Ada ide?

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

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

masih membutuhkan perhatian

Kita bisa tutup!

Le sam. 19 Desember 2020 11:03, damialajogun [email protected] a
écrit:

Hei, sepertinya tidak ada aktivitas untuk masalah ini
baru-baru ini. Apakah masalah telah diperbaiki, atau masih memerlukan
perhatian masyarakat? Masalah ini dapat ditutup jika tidak ada aktivitas lebih lanjut
terjadi. Anda juga dapat memberi label masalah ini sebagai "Untuk Diskusi" atau "Baik dulu
masalah" dan saya akan membiarkannya terbuka. Terima kasih atas kontribusi Anda.

masih membutuhkan perhatian


Anda menerima ini karena Anda disebutkan.
Balas email ini secara langsung, lihat di GitHub
https://github.com/dooboolab/react-native-iap/issues/1040#issuecomment-748451922 ,
atau berhenti berlangganan
https://github.com/notifications/unsubscribe-auth/AJ2B2AUIRMGWIHZSFYL6SWTSVR3AXANCNFSM4OSLGZSQ
.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat

Masalah terkait

hakkikonu picture hakkikonu  ·  4Komentar

sanilcgs picture sanilcgs  ·  3Komentar

bakedbean picture bakedbean  ·  5Komentar

coldfins picture coldfins  ·  3Komentar

MacMillan13 picture MacMillan13  ·  3Komentar