Marwan800 نشر 29 يناير 2021 أرسل تقرير نشر 29 يناير 2021 السلام عليكم ورحمة الله وبركاته تحيه طيبه للجميع قمت بستعمال الاضافة التالية: https://pub.dev/packages/flutter_braintree اتبعت كل الخطوات الموضحه في الشرح والتطبيق شغال الان ويتم عرض اربع ازرار . ايضا قمت بعمل حساب في : Sign up for the sandbox وبعد انشاء الحساب قمت باخذ tokenizationKey من الحساب وتم اضافته في الاضافة flutter_braintree حسب الشرح في الخانة المطلوبة الان بعد تشغيل الكود اقوم بضغط على زر LAUNCH NATIVE DROP-IN ويتم من خلالها طلب طريقة الدفع قمت بادخال بطاقة لتجربة من وثيقة flutter_braintree كالتالي: cardNumber: '4111111111111111', expirationMonth: '12', expirationYear: '2021', بعد تسجيل بيانات البطاقة يظهر لدي showDialog التالي: D/****MAGNES DEBUGGING MESSAGE****(14717): DeviceInfoRequest returned PayPal-Debug-Id: 0063c04d20777 I/AppCompatViewInflater(14717): app:theme is now deprecated. Please move to using android:theme instead. I/AssistStructure(14717): Flattened final assist data: 4584 bytes, containing 1 windows, 21 views W/IInputConnectionWrapper(14717): getTextBeforeCursor on inactive InputConnection I/AssistStructure(14717): Flattened final assist data: 7248 bytes, containing 2 windows, 35 views W/IInputConnectionWrapper(14717): getSelectedText on inactive InputConnection W/IInputConnectionWrapper(14717): getTextAfterCursor on inactive InputConnection W/ViewRootImpl[AddCardActivity](14717): Cancelling event due to no window focus: KeyEvent { action=ACTION_UP, keyCode=KEYCODE_1, scanCode=2, metaState=0, flags=0x28, repeatCount=0, eventTime=211456777, downTime=211456777, deviceId=0, source=0x101, displayId=-1 } W/IInputConnectionWrapper(14717): getTextBeforeCursor on inactive InputConnection W/IInputConnectionWrapper(14717): getSelectedText on inactive InputConnection W/IInputConnectionWrapper(14717): getTextAfterCursor on inactive InputConnection I/chatty (14717): uid=10175(com.example.flutter_appbbb) identical 4 lines W/ViewRootImpl[AddCardActivity](14717): Cancelling event due to no window focus: KeyEvent { action=ACTION_UP, keyCode=KEYCODE_1, scanCode=2, metaState=0, flags=0x28, repeatCount=0, eventTime=211456777, downTime=211456777, deviceId=0, source=0x101, displayId=-1 } W/InputEventReceiver(14717): Attempted to finish an input event but the input event receiver has already been disposed. D/****MAGNES DEBUGGING MESSAGE****(14717): DeviceInfoRequest returned PayPal-Debug-Id: d653db1f48862 ثم لا يحدث شي لا اعلم ما هو سبب المشكلة ولكن العملية تتوقف هنا ولا يوجد رصيد تم اضافته في حساب paypal هل في احد يعرف سبب حدوث هذا المشكلة ؟ الكود كامل: import 'package:flutter/material.dart'; import 'package:flutter_braintree/flutter_braintree.dart'; void main() => runApp( MaterialApp( home: MyApp(), ), ); class MyApp extends StatefulWidget { @override _MyAppState createState() => _MyAppState(); } class _MyAppState extends State<MyApp> { static final String tokenizationKey = '************'; void showNonce(BraintreePaymentMethodNonce nonce) { showDialog( context: context, builder: (_) => AlertDialog( title: Text('Payment method nonce:'), content: Column( mainAxisSize: MainAxisSize.min, crossAxisAlignment: CrossAxisAlignment.stretch, children: <Widget>[ Text('Nonce: ${nonce.nonce}'), SizedBox(height: 16), Text('Type label: ${nonce.typeLabel}'), SizedBox(height: 16), Text('Description: ${nonce.description}'), ], ), ), ); } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: const Text('Braintree example app'), ), body: Center( child: Column( mainAxisAlignment: MainAxisAlignment.center, children: <Widget>[ RaisedButton( onPressed: () async { var request = BraintreeDropInRequest( tokenizationKey: tokenizationKey, collectDeviceData: true, googlePaymentRequest: BraintreeGooglePaymentRequest( totalPrice: '0.01', currencyCode: 'USD', billingAddressRequired: false, ), paypalRequest: BraintreePayPalRequest( amount: '0.01', displayName: 'Example company', ), cardEnabled: true, ); BraintreeDropInResult result = await BraintreeDropIn.start(request); if (result != null) { showNonce(result.paymentMethodNonce); } }, child: Text('LAUNCH NATIVE DROP-IN'), ), RaisedButton( onPressed: () async { final request = BraintreeCreditCardRequest( cardNumber: '4111111111111111', expirationMonth: '12', expirationYear: '2021', ); BraintreePaymentMethodNonce result = await Braintree.tokenizeCreditCard( tokenizationKey, request, ); if (result != null) { showNonce(result); } }, child: Text('TOKENIZE CREDIT CARD'), ), RaisedButton( onPressed: () async { final request = BraintreePayPalRequest( billingAgreementDescription: 'I hereby agree that flutter_braintree is great.', displayName: 'Your Company', ); BraintreePaymentMethodNonce result = await Braintree.requestPaypalNonce( tokenizationKey, request, ); if (result != null) { showNonce(result); } }, child: Text('PAYPAL VAULT FLOW'), ), RaisedButton( onPressed: () async { final request = BraintreePayPalRequest(amount: '0.01'); BraintreePaymentMethodNonce result = await Braintree.requestPaypalNonce( tokenizationKey, request, ); if (result != null) { showNonce(result); } }, child: Text('PAYPAL CHECKOUT FLOW'), ), ], ), ), ); } } اقتباس
0 Wael Aljamal نشر 29 يناير 2021 أرسل تقرير نشر 29 يناير 2021 مرحبا مروان، هل قمت بربط التطبيق مع الخدمة بشكل صحيح في الجزء التالي: <activity android:name="com.braintreepayments.api.BraintreeBrowserSwitchActivity" android:launchMode="singleTask"> <intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <data android:scheme="${applicationId}.braintree" /> </intent-filter> </activity> حيث يوجد قيود في حقل applicationId: يقول: Important: Your app's URL scheme must begin with your app's package ID and end with .braintree. For example, if the Package ID is com.your-company.your-app, then your URL scheme should be com.your-company.your-app.braintree. ${applicationId} is automatically applied with your app's package when using Gradle. Note: The scheme you define must use all lowercase letters. If your package contains underscores, the underscores should be removed when specifying the scheme in your Android Manifest. أظن أنه عليك تعديل هذه الجزئية لإتمام عملية التحقق من أن التطبيق يتبع لنفس الحساب. (يجب أن تحوي على حروف صغيرة فقط و بدون شرطة سفلية) 1 اقتباس
0 Marwan800 نشر 29 يناير 2021 الكاتب أرسل تقرير نشر 29 يناير 2021 بتاريخ 6 دقائق مضت قال Wael Aljamal: مرحبا مروان، هل قمت بربط التطبيق مع الخدمة بشكل صحيح في الجزء التالي: <activity android:name="com.braintreepayments.api.BraintreeBrowserSwitchActivity" android:launchMode="singleTask"> <intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <data android:scheme="${applicationId}.braintree" /> </intent-filter> </activity> حيث يوجد قيود في حقل applicationId: يقول: Important: Your app's URL scheme must begin with your app's package ID and end with .braintree. For example, if the Package ID is com.your-company.your-app, then your URL scheme should be com.your-company.your-app.braintree. ${applicationId} is automatically applied with your app's package when using Gradle. Note: The scheme you define must use all lowercase letters. If your package contains underscores, the underscores should be removed when specifying the scheme in your Android Manifest. أظن أنه عليك تعديل هذه الجزئية لإتمام عملية التحقق من أن التطبيق يتبع لنفس الحساب. (يجب أن تحوي على حروف صغيرة فقط و بدون شرطة سفلية) اهلا اخي قمت بوضعها بشكل التالي: <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.flutter_appbbb"> <!-- io.flutter.app.FlutterApplication is an android.app.Application that calls FlutterMain.startInitialization(this); in its onCreate method. In most cases you can leave this as-is, but you if you want to provide additional functionality it is fine to subclass or reimplement FlutterApplication and put your custom class here. --> <application android:name="io.flutter.app.FlutterApplication" android:label="flutter_appbbb" android:icon="@mipmap/ic_launcher"> <activity android:name=".MainActivity" android:launchMode="singleTop" android:theme="@style/LaunchTheme" android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode" android:hardwareAccelerated="true" android:windowSoftInputMode="adjustResize"> <!-- Specifies an Android theme to apply to this Activity as soon as the Android process has started. This theme is visible to the user while the Flutter UI initializes. After that, this theme continues to determine the Window background behind the Flutter UI. --> <meta-data android:name="io.flutter.embedding.android.NormalTheme" android:resource="@style/NormalTheme" /> <!-- Displays an Android View that continues showing the launch screen Drawable until Flutter paints its first frame, then this splash screen fades out. A splash screen is useful to avoid any visual gap between the end of Android's launch screen and the painting of Flutter's first frame. --> <meta-data android:name="io.flutter.embedding.android.SplashScreenDrawable" android:resource="@drawable/launch_background" /> <intent-filter> <action android:name="android.intent.action.MAIN"/> <category android:name="android.intent.category.LAUNCHER"/> </intent-filter> </activity> <!-- Don't delete the meta-data below. This is used by the Flutter tool to generate GeneratedPluginRegistrant.java --> <activity android:name="com.braintreepayments.api.BraintreeBrowserSwitchActivity" android:launchMode="singleTask"> <intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <data android:scheme="com.example.flutter_appbbb.braintree" /> </intent-filter> </activity> <meta-data android:name="com.google.android.gms.wallet.api.enabled" android:value="true"/> <meta-data android:name="flutterEmbedding" android:value="2" /> </application> </manifest> اقتباس
0 Wael Aljamal نشر 29 يناير 2021 أرسل تقرير نشر 29 يناير 2021 بتاريخ 50 دقائق مضت قال Marwan800: اهلا اخي مرحبا مجددا، تأتي قيمة applicationId من build.gradle في moudle في قسم الأندرويد ابحث عن الجزئية التالية وعدل الاسم حسبها: أرجو الانتباه للتوافق انظر للجزء applicationId "com.example.myapp" android { defaultConfig { applicationId "com.example.myapp" minSdkVersion 15 targetSdkVersion 24 versionCode 1 versionName "1.0" } ... } وبهذه الحالة سوق يتم قراءة معرف التطبيق applicationId من Gradle ثم إسنادها إلى androidMainfest أي اترك العبارة التالية مثلما هي: <data android:scheme="${applicationId}.braintree" /> في الجزء <activity android:name="com.braintreepayments.api.BraintreeBrowserSwitchActivity" android:launchMode="singleTask"> <intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <data android:scheme="${applicationId}.braintree" /> </intent-filter> </activity> شكرا لك 1 اقتباس
0 Marwan800 نشر 29 يناير 2021 الكاتب أرسل تقرير نشر 29 يناير 2021 بتاريخ 2 ساعات قال Wael Aljamal: مرحبا مجددا، تأتي قيمة applicationId من build.gradle في moudle في قسم الأندرويد ابحث عن الجزئية التالية وعدل الاسم حسبها: أرجو الانتباه للتوافق انظر للجزء applicationId "com.example.myapp" android { defaultConfig { applicationId "com.example.myapp" minSdkVersion 15 targetSdkVersion 24 versionCode 1 versionName "1.0" } ... } وبهذه الحالة سوق يتم قراءة معرف التطبيق applicationId من Gradle ثم إسنادها إلى androidMainfest أي اترك العبارة التالية مثلما هي: <data android:scheme="${applicationId}.braintree" /> في الجزء <activity android:name="com.braintreepayments.api.BraintreeBrowserSwitchActivity" android:launchMode="singleTask"> <intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <data android:scheme="${applicationId}.braintree" /> </intent-filter> </activity> شكرا لك على ما يبدو ان الامر لن ينجح ابدا اخي اسمحلي تعبتك لدي استفسار فقط لو سمحت الا توجد طريقة للقيام بذلك بشكل مختلف؟ اقصد الدفع بواسطة الفيزا من خلال فلاتر الى paypal؟ اقتباس
0 Wael Aljamal نشر 29 يناير 2021 أرسل تقرير نشر 29 يناير 2021 بتاريخ 32 دقائق مضت قال Marwan800: استفسار فقط لو سمحت الا توجد طريقة للقيام بذلك بشكل مختلف؟ اقصد الدفع بواسطة الفيزا من خلال فلاتر الى paypal؟ تابع حل المشكلة لتعرف السبب، على كل حال يمكنك تجريب flutter_pay يوجد جدول في الأسفل يوضح التقنيات التي تعمل معها و تتوفر visa لكلا نظامي android + ios وجدت أيضا: stripe_sdk و stripe_payment razorpay - flutter_credit_card بالتوفيق 1 اقتباس
0 Marwan800 نشر 29 يناير 2021 الكاتب أرسل تقرير نشر 29 يناير 2021 بتاريخ 1 دقيقة مضت قال Wael Aljamal: تابع حل المشكلة لتعرف السبب، على كل حال يمكنك تجريب flutter_pay يوجد جدول في الأسفل يوضح التقنيات التي تعمل معها و تتوفر visa لكلا نظامي android + ios وجدت أيضا: stripe_sdk و stripe_payment بالتوفيق الغريب في الامر ان من طور الباكج قام برفع نسخة على github قمت بتجربتها وهيا تحتوي على نفس المشكلة اقتباس
السؤال
Marwan800
السلام عليكم ورحمة الله وبركاته
تحيه طيبه للجميع
قمت بستعمال الاضافة التالية:
https://pub.dev/packages/flutter_braintree
اتبعت كل الخطوات الموضحه في الشرح والتطبيق شغال الان ويتم عرض اربع ازرار .
ايضا قمت بعمل حساب في :
Sign up for the sandbox
وبعد انشاء الحساب قمت باخذ tokenizationKey من الحساب
وتم اضافته في الاضافة flutter_braintree حسب الشرح في الخانة المطلوبة
الان بعد تشغيل الكود اقوم بضغط على زر LAUNCH NATIVE DROP-IN
ويتم من خلالها طلب طريقة الدفع قمت بادخال بطاقة لتجربة من وثيقة flutter_braintree كالتالي:
بعد تسجيل بيانات البطاقة يظهر لدي showDialog التالي:
ثم لا يحدث شي لا اعلم ما هو سبب المشكلة ولكن العملية تتوقف هنا ولا يوجد رصيد تم اضافته في حساب paypal
هل في احد يعرف سبب حدوث هذا المشكلة ؟
الكود كامل:
6 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.