React-native-iap: لا يعمل RNIap على نظام Android ولكنه يعمل في iOS بنفس الكود

تم إنشاؤها على ٧ يوليو ٢٠٢٠  ·  33تعليقات  ·  مصدر: dooboolab/react-native-iap

نسخة من رد فعل - أصلية - IAP
4.4.7

نسخة من رد الفعل الأصلي
0.60.6

المنصات التي واجهت الخطأ فيها (IOS أو Android أو كليهما؟)
ذكري المظهر

سلوك متوقع

     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);
        }

السلوك المتوقع هو قائمة بالمنتجات التي تم سحبها من وحدة التحكم عن طريق .getProducts () المطبوعة في Terminal

السلوك الفعلي
لم يتم إرجاع الوعد. خطأ "الفواتير غير متوفرة"

بيئة مختبرة (محاكي؟ جهاز حقيقي؟)
جهاز حقيقي (التطبيق قيد الإنتاج حاليًا)

خطوات إعادة إنتاج السلوك
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;
    }
}

لا يمكنني معرفة سبب ذلك. أنا أستخدم هذا الرمز الدقيق لنظام iOS وهو يعمل بشكل مثالي. لقد قمت بإعداد جميع المنتجات في وحدة التحكم في Play ، وإضافة إذن الفواتير إلى ملف البيان ، وحزمة IAP المرتبطة (أنا أستخدم AndroidX حتى يتم ربط الحزمة تلقائيًا). لقد قمت بتسجيل الدخول إلى متجر Play ولدي أحدث إصدار من متجر play ، لكن initConnection () لا يزال لا يعمل. أنا لا أعرف ماذا تفعل. أي مساعدة يحظى بتقدير كبير! شكرا لقرائتك.

🙏 help wanted 🤖 android

ال 33 كومينتر

هل هذا يساعد؟

هل هذا يساعد؟

لسوء الحظ ، لم يساعد:

damialajogun @ هل اكتشفت ما هو الخطأ؟ لدي نفس الخطأ بالضبط ولا أفهم من أين أتت ... initConnection () غير محدد.

hyochan هل لديك فكرة؟

damialajogun @ هل اكتشفت ما هو الخطأ؟ لدي نفس الخطأ بالضبط ولا أفهم من أين أتت ... initConnection () غير محدد.

مرحبًا ، لا ، لم أحسب الأمر بعد :(

هل أضفت <uses-permission android:name="com.android.vending.BILLING" /> إلى ملف AndroidManifest.xml؟

hakkikonu نعم لدي

في سجل الخطأ الخاص بي ، يمكنني رؤية نفس الخطأ يحدث لجزء صغير من المستخدمين لدي في العديد من البلدان مثل الولايات المتحدة ونيوزيلندا. يبدو أنه يحدث بشكل غير متسق للغاية. أي فكرة عن سبب هذا؟

@ joris1995 لدي أيضًا هذه المشكلة ، حيث لا يستطيع جزء صغير من المستخدمين إجراء عمليات شراء داخل التطبيق ، والخطأ هو "لم يتم العثور على sku. يُرجى جلب المنتجات أولاً عن طريق الاتصال بـ getItems" ، ولكن sku موجود لأنه في نافذة الشراء المنبثقة I اعرض سعر العنصر المأخوذ من getProducts ، فإن getItems غير موجود حتى في واجهة برمجة التطبيقات

هل تطبيق متجر google play أحدث إصدار؟ هل هذه المشكلة تحدث فقط على هاتفك أو على جميع المستخدمين.

يمكنك أيضًا محاولة تسجيل الدخول إلى متجر google play بحساب gmail مختلف.

تأكد من تنظيف خدمات google play وملفات ذاكرة التخزين المؤقت لتطبيق متجر google play من الإعدادات / التطبيقات / google play على جهازك.

كل المستخدمين / الحسابات / الهواتف ...

بالنسبة لي ، إنه جزء فقط من المستخدمين. لا يبدو أن هناك أي عامل ثابت مثل البلد أو إصدار نظام التشغيل أو الشركة المصنعة للجهاز. في BugSnag ، يُظهر الخطأ "الفوترة غير متاحة. قد تكون هذه مشكلة في جهازك ، أو قد يكون متجر Play معطلاً. ما الذي يمكن أن يكون سببه؟

تحتاج إلى إرسال إصدار تجريبي قبل أن تتمكن من تحميل مشتريات التطبيق ويمكنك تصحيحه فقط باستخدام إصدار الإصدار.

بيتا ليس ضروريا. ألفا مغلقة أيضا على ما يرام

لدي أيضًا نفس المشكلة ، لقد قدمت نسخة تجريبية وتمت الموافقة عليها منذ 4 أيام

إذا فهمت ما تقوله ، فهذا يعني أن initConnection () لا تعمل في الاختبار ولكن في مرحلة تجريبية؟

Kamsou نعم ، على الرغم من أن "getProducts ()" بشكل أساسي لا يعمل في بناء تصحيح الأخطاء.

مزيد من المعلومات: https://medium.com/bleeding-edge/testing-in-app-purchases-on-android-a6de74f78878

ما يحدث معي هو أنه عندما أريد معرفة ما إذا كان قد تم الشراء ، فأنا أفعل:
RNIap.getPurchaseHistory ()
على iOs كل شيء يعمل بشكل طبيعي.
لكن على Android لدي خطأ واحد: "خطأ: E_IAP_NOT_AVAILABLE"
_أنا على المحاكي المحلي الخاص بي_

"" 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 () => {
محاولة {
اشتراكات const = انتظار getSubscriptions (itemSkus) ؛
console.log ("المنتجات" ، والاشتراكات) ؛
setSubscriptions (الاشتراكات) ؛
} catch (يخطئ) {
console.warn (err.code، err.message) ؛
}
} ؛
useEffect (() => {
initilizeIAPConnection () ،
} ، []) ؛

"" " I just removed await for consumeAllItemsAndroid () ؛ وبدأ العمل

rizshivalli سعيد لسماع أنه يعمل من أجلك. لسوء الحظ ، لا يزال الأمر لا يعمل بالنسبة لي عندما أقوم بإزالة الانتظار مقابل consumeAllItemsAndroid() . مشكلتي هي أن initConnection() لا يعمل. كيف يمكنك الحصول على هذا الجزء للعمل؟

damialajogun أزلت المحاولة وأضفت. ثم الصيد

rizshivalli حاولت ذلك وما زالت لا تعمل بالنسبة لي :(. آسف لجميع الأسئلة ، ولكن هل يمكنك بالفعل رؤية "المنتجات" المطبوعة في المحطة؟ أعتقد أن المشكلة مع لي أنها لا تسحب جميع منتجاتي التي تمت تهيئتها في وحدة التحكم في اللعب على الرغم من أنني قمت بإعدادها وهي نشطة.
const getItems = async () => { try { const subscriptions = await getSubscriptions(itemSkus); console.log('Products', subscriptions);

damialajogun @ نعم إنه يعمل. أنا أيضًا قادر على اختبار المدفوعات على نظام Android أيضًا. هل قمت بإصدار الإصدار إلى إصدار ألفا أو إصدار تجريبي على نظام Android؟

rizshivalli ليس alpha أو beta لكنني قمت

مرحبًا rizshivalli سؤال سريع - هل تطبيقك مدرج على أنه مجاني أم مدفوع على Google Play؟ المنجم مجاني ولكن مع عمليات الشراء داخل التطبيق (يمكن للمستخدمين تنزيل التطبيق مجانًا واختيار شراء المواد غير الاستهلاكية في التطبيق) ولكني الآن أتساءل عما إذا كان يجب إدراجه على أنه مدفوع مقابل تشغيل IAP؟

damialajogun تم إدراجه على أنه مجاني لأن المستخدمين لا يحتاجون إلى الدفع مقابل تثبيت التطبيق

صباحكم جميعا
هل لدى أي منكم تطبيق Android الخاص به الذي يعمل بشكل جيد مع الدفع؟
لأنه معي لا يعمل initConnection.

أفعل ، باستخدام أحدث إصدار. لا أعتقد أن initConnection تفعل أي شيء في الواقع ، إنها فقط تبدأ الاتصال ، ثم تحتاج إلى جلب المنتجات

أي حل لهذا؟
بالنسبة لي ، يتعطل android قبل تشغيل التطبيق. لكن Ios يعمل كما هو متوقع.
الرجاء المساعدة

أواجه (ربما) نفس المشكلة.

لقد أضفت اشتراكين آخرين إلى تطبيقي ، لكن الاشتراك القديم فقط هو الذي يعمل.
عندما أحاول انتظار RNIap.getSubscriptions () أحصل على "تشير Google إلى وجود مشكلة في الاتصال بالدفع"

عندما أحاول RNIap.requestSubscription (معرف فرعي ، صحيح) أحصل على "لم يتم العثور على sku".

Skus مسجلة في google play والمعرفات صحيحة ، تأكد من ذلك. تم اختباره على جهاز محاكاة وجهاز حقيقي ، باستخدام أوضاع التصحيح والإصدار.

اي فكرة؟

مرحبًا ، يبدو أنه لم يكن هناك أي نشاط بشأن هذه المشكلة مؤخرًا. هل تم إصلاح المشكلة أم أنها لا تزال تتطلب اهتمام المجتمع؟ قد يتم إغلاق هذه المشكلة في حالة عدم حدوث أي نشاط آخر. يمكنك أيضًا تصنيف هذه المشكلة على أنها "للمناقشة" أو "مشكلة أولى جيدة" وسأتركها مفتوحة. شكرا لمساهماتكم.

مرحبًا ، يبدو أنه لم يكن هناك أي نشاط بشأن هذه المشكلة مؤخرًا. هل تم إصلاح المشكلة أم أنها لا تزال تتطلب اهتمام المجتمع؟ قد يتم إغلاق هذه المشكلة في حالة عدم حدوث أي نشاط آخر. يمكنك أيضًا تصنيف هذه المشكلة على أنها "للمناقشة" أو "مشكلة أولى جيدة" وسأتركها مفتوحة. شكرا لمساهماتكم.

لا يزال يتطلب الاهتمام

يمكننا أن نغلق!

لو سام. 19 دك. 2020 في 11:03 ، damialajogun [email protected] أ
écrit:

مرحبًا ، يبدو أنه لم يكن هناك أي نشاط بشأن هذه المشكلة
حديثا. هل تم إصلاح المشكلة أم أنها لا تزال تتطلب
انتباه المجتمع؟ قد يتم إغلاق هذه المشكلة إذا لم يكن هناك نشاط آخر
يحدث. يمكنك أيضًا تصنيف هذه المشكلة على أنها "للمناقشة" أو "جيدة أولاً
المشكلة "وسأتركها مفتوحة. شكرًا لك على مساهماتك.

لا يزال يتطلب الاهتمام

-
أنت تتلقى هذا لأنه تم ذكرك.
قم بالرد على هذا البريد الإلكتروني مباشرة ، وقم بعرضه على GitHub
https://github.com/dooboolab/react-native-iap/issues/1040#issuecomment-748451922 ،
أو إلغاء الاشتراك
https://github.com/notifications/unsubscribe-auth/AJ2B2AUIRMGWIHZSFYL6SWTSVR3AXANCNFSM4OSLGZSQ
.

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات