-
المساهمات
787 -
تاريخ الانضمام
-
تاريخ آخر زيارة
-
عدد الأيام التي تصدر بها
2
نوع المحتوى
ريادة الأعمال
البرمجة
التصميم
DevOps
التسويق والمبيعات
العمل الحر
البرامج والتطبيقات
آخر التحديثات
قصص نجاح
أسئلة وأجوبة
كتب
دورات
أجوبة بواسطة Flutter Dev
-
-
قمت بعمل كلاس منفصل لكلاس اعلانات RewardedVideoAd من ادموب
بشكل التالي:
import 'package:firebase_admob/firebase_admob.dart'; import 'helper.dart'; const String testDevice = '********'; class AdsReward { static int _coins=0; static RewardedVideoAd videoAd = RewardedVideoAd.instance; static void initialize() { FirebaseAdMob.instance.initialize(appId: AdManager.appId); } static MobileAdTargetingInfo targetingInfo = MobileAdTargetingInfo( testDevices: testDevice != null ? <String>[testDevice] : null, keywords: <String>['Game', 'Mario'], //contentUrl: 'https://flutter.io', //childDirected: true, nonPersonalizedAds: true,// Android emulators are considered test devices ); static RewardedVideoAd _createRewardedVideoAd() { videoAd.load(adUnitId:AdManager.rewardedAdUnitId, targetingInfo: targetingInfo); RewardedVideoAd.instance.listener = (RewardedVideoAdEvent event, {String rewardType, int rewardAmount}) { if(event == RewardedVideoAdEvent.closed) { videoAd.load(adUnitId:AdManager.rewardedAdUnitId, targetingInfo: targetingInfo); } }; } static void showRewardedVideoAd() { if (videoAd == null) videoAd = _createRewardedVideoAd(); videoAd .show().catchError((e) => print("error in showing ad: ${e.toString()}")); } }
واقوم بستدعاه من الصفحة المستهدفة بشكل التالي :
onPressed: (){ AdsReward.showRewardedVideoAd(); },
ولكن اواجه مشكلة مع كل محاولة عرض للاعلان كالتالي:
error in showing ad: PlatformException(ad_not_loaded, show failed for rewarded video, no ad was loaded, null, null)
فيه احد يعرف سبب المشكلة وكيفية حلها لو تكرمتو
-
بتاريخ 8 دقائق مضت قال بلال زيادة:
يمكنك استخدام الأمر التالي
flutter downgrade <version>
كل الشكر لك الغالي نجح الامر
-
1
-
-
بتاريخ 5 ساعات قال بلال زيادة:
يبدو انك غير متابع لما صدر أول امس لقد قامت فلاتر بتحديث النسخة وأصبحت فلاتر 2 و هناك الكثير من المشاكل مع البكجات التي لا تتوافق مع نسخة فلاتر 2 , ايضا قامت فلاتر 2 بتعطيل عدة بكجات ربما يكون أحدى البكجات التي تستخدمها من ضمنها.
ايضا لا تقلق يمكنك الرجوع إلى إصدار فلاتر السابق إذا لا تريد العمل على إصدار فلاتر 2.
كما ويمكنك الرجوع إلى كل بكج على pub.dev و متابعة يبدو أن الكثير من البكجات قامت بتحديث إصداراتها لتناسب فلاتر 2.
يمكنك الرجوع هنا و أختيار أي نسخة sdk ويمكنك استخدامها إذا كنت لا تريد فلاتر 2.
اهلا بك عزيزي
شاكر لك ردك الغالي
لدي استفسار فقط لو تكرمت كيف ممكن ارجع الى الاصدار السابق؟
بتاريخ منذ ساعة مضت قال Mohammad Issa:ك مبرمجين عادةً ما نتريث عندما تكون هناك تحديثات كبيرة ل بيئة عمل معينة
لذا انصحك ب الانتظار لمدة اسبوعين أو ثلاثة قبل التحديث ل نسخة Flutter 2
يمكنك التراجع عن التحديث والابقاء على الاصدار السابق ريثما تستقر النسخة وهذه نصيحتي لك
اما في حال كن ترغب في التجربة على النسخة الحديثة ف تتبع الرابط التالي والذي يحتوي على اهم الاخطاء في التحديث الجديد وكيفة معالجتها على أمل أ، تكون الاخطاء الموجودة لديك منها
https://github.com/flutter/flutter/wiki/Flutter-Cherrypick-Process
اهلا بك اخي
شاكر لك افادتك تسلم
لدي استفسار فقط لو تكرمت
كيف ممكن ارجع الى الاصدار السابق؟
-
قمت بترقية فلاتر بالامس
ولان اواجه بعض مشاكل التوافق لدى الحزم او الباكنج المستعمله من فلاتر
Because auto_direction >=0.0.4+1 depends on intl ^0.16.0 and every version of flutter_localizations from sdk depends on intl 0.17.0, auto_direction >=0.0.4+1 is incompatible with flutter_localizations from sdk. And because easy_localization >=2.1.0+1 depends on flutter_localizations any from sdk, auto_direction >=0.0.4+1 is incompatible with easy_localization >=2.1.0+1. So, because onefrist depends on both easy_localization ^2.3.2 and auto_direction ^0.0.4+1, version solving failed. pub finished with exit code 1 Process finished with exit code 1
name: example description: A new Flutter project. # The following line prevents the package from being accidentally published to # pub.dev using `pub publish`. This is preferred for private packages. publish_to: 'none' # Remove this line if you wish to publish to pub.dev # The following defines the version and build number for your application. # A version number is three numbers separated by dots, like 1.2.43 # followed by an optional build number separated by a +. # Both the version and the builder number may be overridden in flutter # build by specifying --build-name and --build-number, respectively. # In Android, build-name is used as versionName while build-number used as versionCode. # Read more about Android versioning at https://developer.android.com/studio/publish/versioning # In iOS, build-name is used as CFBundleShortVersionString while build-number used as CFBundleVersion. # Read more about iOS versioning at # https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html version: 1.0.0+1 environment: sdk: ">=2.7.0 <3.0.0" dependencies: enum_to_string: ^1.0.14 flutter_local_notifications: ^4.0.1+1 pull_to_refresh: ^1.6.1 flutter_svg: ^0.18.1 flutter_open_whatsapp: ^0.1.2 http: ^0.12.0 share: ^0.6.5 url_launcher: "^3.0.2" image_picker: ^0.6.7+4 provider: 3.0.0+1 admob_flutter: ^1.0.1 flutter_speed_dial: ^1.0.9 shared_preferences: ^0.5.6+2 path_provider: "^0.4.1" image: "^2.0.4" flutter: sdk: flutter splashscreen: ^1.3.5 firebase_admob: ^0.9.0+10 easy_localization: ^2.3.2 unicorndial: "^1.1.5" cupertino_icons: ^0.1.3 firebase_messaging: ^6.0.16 # firebase_core: ^0.4.1+5 firebase_analytics: ^5.0.2 # firebase_auth: ^0.14.0+5 firebase_auth: ^0.18.3 firebase_core: ^0.5.2 pinput: ^0.2.6 # cloud_firestore: ^0.12.9+5 # firebase_core_web: ^0.2.1+3 pin_entry_text_field: ^0.1.4 auto_direction: ^0.0.4+1 flutter_launcher_icons: "^0.8.0" flutter_launcher_name: "^0.0.1" device_info: ^1.0.0 fluttertoast: ^7.1.6 country_list_pick: ^1.0.1+2 material_design_icons_flutter: ^4.0.5855 dev_dependencies: flutter_test: sdk: flutter flutter_launcher_name: name: "example" flutter_icons: android: true ios: true image_path: "assets/icons/example.png"
فيه احد يقدر يساعدنا في حل هذا المشكله ؟حاولت اغير اصدار الحزم المستعملة ولكن المشكله كل ما اغير اصدار معين من الحزم يظهر لي مشكلة في الحزمة التاليه
او هل توجد طريقة لرجوع الى الاصدار السابق من فلاتر؟
-
السلام عليكم ورحمة الله وبركاته
final FirebaseMessaging firebaseMessaging = FirebaseMessaging(); FlutterLocalNotificationsPlugin flutterLocalNotificationsPlugin = new FlutterLocalNotificationsPlugin(); Future<Map<String, dynamic>> sendAndRetrieveMessage() async { await firebaseMessaging.requestNotificationPermissions( const IosNotificationSettings( sound: true, badge: true, alert: true, provisional: false), ); } var initializationSettingsAndroid = new AndroidInitializationSettings('@mipmap/ic_launcher'); var initializationSettingsIOS = new IOSInitializationSettings(); var initializationSettings = new InitializationSettings( android: initializationSettingsAndroid, iOS: initializationSettingsIOS); flutterLocalNotificationsPlugin = new FlutterLocalNotificationsPlugin(); flutterLocalNotificationsPlugin.initialize(initializationSettings, onSelectNotification: onSelectNotification); Future<dynamic> onSelectNotification(String payload) async { /*Do whatever you want to do on notification click. In this case, I'll show an alert dialog*/ showDialog( context: context, builder: (_) => AlertDialog( title: Text(payload), content: Text("Payload: $payload"), ), ); } Future<void> _showNotification( int notificationId, String notificationTitle, String notificationContent, String payload, { String channelId = '1234', String channelTitle = 'Android Channel', String channelDescription = 'Default Android Channel for notifications', Priority notificationPriority = Priority.high, Importance notificationImportance = Importance.max, }) async { var androidPlatformChannelSpecifics = new AndroidNotificationDetails( channelId, channelTitle, channelDescription, playSound: false, importance: notificationImportance, priority: notificationPriority, ); var iOSPlatformChannelSpecifics = new IOSNotificationDetails(presentSound: false); var platformChannelSpecifics = new NotificationDetails( android: androidPlatformChannelSpecifics, iOS: iOSPlatformChannelSpecifics); await flutterLocalNotificationsPlugin.show( notificationId, notificationTitle, notificationContent, platformChannelSpecifics, payload: payload, ); } notification(){ firebaseMessaging.configure( onMessage: (Map<String, dynamic> message) async { _showNotification(1234, "GET title FROM message OBJECT", "GET description FROM message OBJECT", "GET PAYLOAD FROM message OBJECT"); return; // print("onMessage: $message"); }, onLaunch: (Map<String, dynamic> message) async { print("onLaunch: $message"); }, onResume: (Map<String, dynamic> message) async { print("onResume: $message"); }, ); }
الكود اعلاه هو كود جلب الاشعارات وعرضها في التطبيق من خلال FCM
الكود شغال بشكل طبيعي على الاندرويد و iOS
لو حاولت تعديل السطر التالي من الشكال :
_showNotification(1234, "GET title FROM message OBJECT", "GET description FROM message OBJECT", "GET PAYLOAD FROM message OBJECT");
الى الشكل :
_showNotification(1234, message['notification']['title'], message['notification']['body'], "GET PAYLOAD FROM message OBJECT");
حتى استطيع عرض محتوى الاشعار والعنوان الكود يصبح في الاندويد شغال 100%100 ولكن في نظام iOS لا يعمل ابدا
ما هو الحل كيف يمكن عرض المحتوى والعنوان من خلاله ؟
مع العلم انني كما ذكرت سابقا لو كان بشكل الافتراضي الاول فهو يعمل بشكل ممتاز على كل الانظمة بمعنى لا يوجد لا توجد اي مشكله ولكن احتاج الى عرض العنوان والمحتوى
-
بتاريخ 13 ساعات قال بلال زيادة:
يجب إضافة الأسطر التالية إلى didFinishLaunchingWithOptions في ملف AppDelegate.m إذا كنت تستخدم objective-c أو AppDelegate.swift إذا كنت تستخدم swift
objective-c
if (@available(iOS 10.0, *)) { [UNUserNotificationCenter currentNotificationCenter].delegate = (id<UNUserNotificationCenterDelegate>) self; }
Swift
if #available(iOS 10.0, *) { UNUserNotificationCenter.current().delegate = self as? UNUserNotificationCenterDelegate }
ثم تشغيل الأوامر التالية
flutter clean flutter run
إذا لم ينجح الأمر قم بتحديث المكتبة إلى أخر إصدار.
اهلا بيك اخي
كل هذا تم اضافته سابقا اخوي
ولكن بدون فائدته المشكله مستمره
-
السلام عليكم ورحمة الله وبركاته
تحيه طيبه للجميع
استفسار لو تكرمتو
قمت بربط مشروعي مع الفاير بيز لستقبال المسجات الكود شغال تمام
ولكن المشكلة انا استقبل المسجات الان اذا كان التطبيق في الخلفيه في نظام IOS اما لو كان التطبيق مفتوح المسجات لا تظهر
مع العلم ان الكود شغال على نظام الاندويد بشكل طبيعي ولكن مشكلتي في نظام ios
الكود المستعمل كالتالي الان :
طبعا انا اعرض الاشعارات الان من خلال باكجج
flutter_local_notifications
FlutterLocalNotificationsPlugin flutterLocalNotificationsPlugin = new FlutterLocalNotificationsPlugin(); Future onSelectNotification(String payload) async { showDialog( context: context, builder: (_) { return new AlertDialog( title: Text("PayLoad"), content: Text("Payload : $payload"), ); }, ); } void showNotification(String title, String body) async { await _demoNotification(title, body); } Future<void> _demoNotification(String title, String body) async { var androidPlatformChannelSpecifics = AndroidNotificationDetails( 'channel_ID', 'channel name', 'channel description', importance: Importance.max, playSound: true, // sound: 'sound', // sound: true, showProgress: true, priority: Priority.high, ticker: 'test ticker'); var iOSChannelSpecifics = IOSNotificationDetails(); var platformChannelSpecifics = NotificationDetails( android: androidPlatformChannelSpecifics, iOS: iOSChannelSpecifics); await flutterLocalNotificationsPlugin .show(0, title, body, platformChannelSpecifics, payload: 'test'); } @override void initState() { super.initState(); var initializationSettingsAndroid = new AndroidInitializationSettings('@mipmap/ic_launcher'); var initializationSettingsIOS = new IOSInitializationSettings(); var initializationSettings = new InitializationSettings( android: initializationSettingsAndroid, iOS: initializationSettingsIOS); flutterLocalNotificationsPlugin.initialize(initializationSettings, onSelectNotification: onSelectNotification); } notification(){ firebaseMessaging.configure( onMessage: (Map<String, dynamic> message) async { showNotification( message['notification']['title'], message['notification']['body']); print("onMessage: $message"); }, onLaunch: (Map<String, dynamic> message) async { print("onLaunch: $message"); }, onResume: (Map<String, dynamic> message) async { print("onResume: $message"); }, ); }
احد يعرف كيف ممكن حل هذا المشكلة ويصير عرض التنبيهات وتطبيق مفتوح ممكن على نظام ios ?
-
بتاريخ On 2/24/2021 at 17:13 قال بلال زيادة:
ممكن ترفق ملفات المشروع كاملاً؟
وتأكد من
<meta-data android:name="com.google.android.gms.ads.APPLICATION_ID" android:value="[ADMOB_APP_ID]"/>
داخل ملف AndroidManifest.xml بحيث أنه
[ADMOB_APP_ID]
هو معرف التطبيق على أدموب.
لتجريب المشروع والتأكد من أنك قمت بالخطوات كاملاً يرجى إرفاق ملفات المشروع للمساعدة في حل المشكلة.
حاولت جعل حجمه صغير حتى استطيع ارفاقه لا اعلم لماذا يتم توليد ملفات كبيره apk في وقت العمل ولكن ملفات المشروع 100%100 في مكانها الصحيح
ياليت تطلع عليه وتفيدني لو تكرمت
-
في الكود المنشور في منشور حزمة firebase_admob
يوجد السطر البرمجي التالي:
const String testDevice = 'YOUR_DEVICE_ID';
لما اعمل تشغيل للكود او المثال المنشور في الاضافة
احصل على السطر البرمجي التالي:
Use RequestConfiguration.Builder().setTestDeviceIds(Arrays.asList("****************") to get test ads on this device.
طبعا هو يعطيني رقم جهازي بدل النجوم وفي حالة قمت بوضعه في السطر المكتوب بـ testDevice بين الاقواس
كود الاعلانات شغال لدي 100%100
ولكن لو لم اضعه احصل على الخطاء البرمجي التالي:
I/Ads (29451): Use RequestConfiguration.Builder().setTestDeviceIds(Arrays.asList("*************") to get test ads on this device. W/flutter (29451): onAdFailedToLoad: 3 I/Ads (29451): Ad failed to load : 3 I/flutter (29451): BannerAd event MobileAdEvent.failedToLoad
وهذا الكود البرمجي كامل:
// Copyright 2017 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // ignore_for_file: public_member_api_docs import 'dart:io'; import 'package:flutter/material.dart'; import 'package:firebase_core/firebase_core.dart'; import 'package:firebase_admob/firebase_admob.dart'; // You can also test with your own ad unit IDs by registering your device as a // test device. Check the logs for your device's ID value. const String testDevice = 'YOUR_DEVICE_ID'; Future<void> main() async { WidgetsFlutterBinding.ensureInitialized(); await Firebase.initializeApp(); runApp(MyApp()); } class MyApp extends StatefulWidget { @override _MyAppState createState() => _MyAppState(); } class _MyAppState extends State<MyApp> { static const MobileAdTargetingInfo targetingInfo = MobileAdTargetingInfo( testDevices: testDevice != null ? <String>[testDevice] : null, keywords: <String>['foo', 'bar'], contentUrl: 'http://foo.com/bar.html', childDirected: true, nonPersonalizedAds: true, ); BannerAd _bannerAd; NativeAd _nativeAd; InterstitialAd _interstitialAd; int _coins = 0; BannerAd createBannerAd() { return BannerAd( adUnitId: BannerAd.testAdUnitId, size: AdSize.banner, targetingInfo: targetingInfo, listener: (MobileAdEvent event) { print("BannerAd event $event"); }, ); } InterstitialAd createInterstitialAd() { return InterstitialAd( adUnitId: InterstitialAd.testAdUnitId, targetingInfo: targetingInfo, listener: (MobileAdEvent event) { print("InterstitialAd event $event"); }, ); } NativeAd createNativeAd() { return NativeAd( adUnitId: NativeAd.testAdUnitId, factoryId: 'adFactoryExample', targetingInfo: targetingInfo, listener: (MobileAdEvent event) { print("$NativeAd event $event"); }, ); } @override void initState() { super.initState(); FirebaseAdMob.instance.initialize(appId: FirebaseAdMob.testAppId); _bannerAd = createBannerAd()..load(); RewardedVideoAd.instance.listener = (RewardedVideoAdEvent event, {String rewardType, int rewardAmount}) { print("RewardedVideoAd event $event"); if (event == RewardedVideoAdEvent.rewarded) { setState(() { _coins += rewardAmount; }); } }; } @override void dispose() { _bannerAd?.dispose(); _nativeAd?.dispose(); _interstitialAd?.dispose(); super.dispose(); } @override Widget build(BuildContext context) { return MaterialApp( home: Scaffold( appBar: AppBar( title: const Text('AdMob Plugin example app'), ), body: SingleChildScrollView( child: Center( child: Column( crossAxisAlignment: CrossAxisAlignment.center, mainAxisSize: MainAxisSize.min, children: <Widget>[ RaisedButton( child: const Text('SHOW BANNER'), onPressed: () { _bannerAd ??= createBannerAd(); _bannerAd ..load() ..show(); }), RaisedButton( child: const Text('SHOW BANNER WITH OFFSET'), onPressed: () { _bannerAd ??= createBannerAd(); _bannerAd ..load() ..show(horizontalCenterOffset: -50, anchorOffset: 100); }), RaisedButton( child: const Text('REMOVE BANNER'), onPressed: () { _bannerAd?.dispose(); _bannerAd = null; }), RaisedButton( child: const Text('LOAD INTERSTITIAL'), onPressed: () { _interstitialAd?.dispose(); _interstitialAd = createInterstitialAd()..load(); }, ), RaisedButton( child: const Text('SHOW INTERSTITIAL'), onPressed: () { _interstitialAd?.show(); }, ), RaisedButton( child: const Text('SHOW NATIVE'), onPressed: () { _nativeAd ??= createNativeAd(); _nativeAd ..load() ..show( anchorType: Platform.isAndroid ? AnchorType.bottom : AnchorType.top, ); }, ), RaisedButton( child: const Text('REMOVE NATIVE'), onPressed: () { _nativeAd?.dispose(); _nativeAd = null; }, ), RaisedButton( child: const Text('LOAD REWARDED VIDEO'), onPressed: () { RewardedVideoAd.instance.load( adUnitId: RewardedVideoAd.testAdUnitId, targetingInfo: targetingInfo); }, ), RaisedButton( child: const Text('SHOW REWARDED VIDEO'), onPressed: () { RewardedVideoAd.instance.show(); }, ), Text("You have $_coins coins."), ].map((Widget button) { return Padding( padding: const EdgeInsets.symmetric(vertical: 16.0), child: button, ); }).toList(), ), ), ), ), ); } }
كيف ممكن حل هذا المشكلة لو تكرمتو؟
مع العلم اني اختبر المشروع ب جهازي الحقيقي وليس محاكي الاندرويد
-
1
-
-
قمت بعمل مشروع يحتوي على اعلانات ادموب
وتم عمل حساب في موقع اد موب والحصول على الموافقة على الحساب
اصبح الحساب رسمي الان
ولكن بعد تحويل روابط مشروعي روابط حقيقه من حسابي المفعل وتغير روابط التجربة اصبح لا يعرض الاعلانات واحصل على الخطاء التالي في كل مره
D/DynamitePackage( 5335): Instantiating com.google.android.gms.ads.ChimeraAdManagerCreatorImpl I/Ads ( 5335): Use RequestConfiguration.Builder().setTestDeviceIds(Arrays.asList("FF389DA3B04D2B1149051995E9108E93") to get test ads on this device. W/flutter ( 5335): onAdFailedToLoad: 3 I/Ads ( 5335): Ad failed to load : 3 I/flutter ( 5335): BannerAd event MobileAdEvent.failedToLoad
هل يوجد شي يفترض عمله بعد تفعيل الحساب من قبل جوجل مختلف عما فعلته ام توجد اسباب مختلفه لهذا المشكله ؟
مع العلم اني اخذت كل الروابط من حسابي الحقيقي رابط التطبيق ورابط الاعلان
-
1
-
-
بتاريخ 1 دقيقة مضت قال Abdulraheem Barghouthi:
ربي يعطيك العافيه اخي
قمت بتجربة هذا الامر ولكن واجهتني مشكلة مع ربط المشروع من خلال admob شغله تخص الصلاحيات مع اني متاكد انه المالك وكل الصلاحيات لديه لذلك قمت بحذف المشروع واعادته من جديد لا توجد مشكله
كل الشكر لك الغالي
-
1
-
-
يا اخوان لدي استفسار انا قمت بتسجيل الدخول الى console.firebase
وعملت فيها مشاريع حتى اتمكن من الاتصال ب الفايربيز
الايميل كان تجريبي الان انا محتاج اغيره هل توجد طريقة لفعل ذلك؟
او توجد طريقة لنقل المشروع الى ايميل ثاني؟او حساب ثاني بالاصح
بسبب اختلاف الايميلات الان لا استطيع ربط مشروع admob مع المشاريع التي فيه console.firebase
-
1
-
-
بتاريخ 5 ساعات قال بلال زيادة:
مرحبا هل ممكن ترفق ملفات المشروع, أريد فحص المشروع لحل المشكلة.
خلاص اخي الله يطول بعمرك انا فصلت هذه الصفحه ووضعت الاعلان كامل او كود الاعلان كامل في الصفحه المستهدفة كل الشكر لك الغالي
-
بنسبة الى اعلانات Admob من نوع RewardedVideoAd
في وقت الظهور للمستخدم هل يوجد فرق في سعر الربح في حالة المستخدم اغلق الفيديو بدون ان يكمل عدد الثواني ؟
ام ان السعر واحد اذا اغلق الفيديو قبل انتهاء الوقت او تابع المقطع كامل؟
-
بتاريخ 7 ساعات قال بلال زيادة:
هناك عدة طرق مستخدمة.
- ممكن تحفظ القيمة عن طريق SharedPrefrence وتجلب قيمة المفتاح.
- يمكن عن طريق LocalStorage و أيضا يمكن جلب القيمة من المفتاح المخزن.
- أو عن طريق تنفيذ Setter , Getter ويمكن عن طريق الكود التالي.
يمكن تعريف getter
int get coinsValue { return coins; }
أو بشكل مختصر
int get coinsValue => coins;
ويمكن أن يكون الكود الخاص بك هكذا
import 'package:firebase_admob/firebase_admob.dart'; import 'helper.dart'; //const String testDevice = 'YOUR_DEVICE_ID'; class AdsRewardedVideoAd { static bool _loaded = false; static int coins = 0; int get coinsValue => coins; static RewardedVideoAd videoAd = RewardedVideoAd.instance; static void initialize() { FirebaseAdMob.instance.initialize(appId: AdManager.appId); } static MobileAdTargetingInfo targetingInfo = MobileAdTargetingInfo( keywords: <String>['flutterio', 'beautiful apps'], testDevices: <String>[], // Android emulators are considered test devices ); static RewardedVideoAd createRewardedVideoAd() { videoAd.load(adUnitId: AdManager.rewardedAdUnitId, targetingInfo: targetingInfo); RewardedVideoAd.instance.listener = (RewardedVideoAdEvent event, {String rewardType, int rewardAmount}) { if(event == RewardedVideoAdEvent.rewarded) { coins+=rewardAmount; print('xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx $coins'); } }; } static void showRewardedVideoAd() { if (videoAd == null) videoAd = createRewardedVideoAd(); videoAd .show().catchError((e) => print("error in showing ad: ${e.toString()}")); } }
ويمكن جلبها عن طريق الكلاس
AdsRewardedVideoAd.coinsValue
بحيث getter => coinsValue يأخذ قيمة coins عندما تتحدث في أي وقت.
لقد أجبتك امس هنا, هل قمت بتجربتها.
ارجوا إضافة ملفات المشروع هنا كاملاً للمساعدة في حل المشكلة.
مرحبا اخي الكريم
المشكله الان ان الكود لا يصل الى ميثود RewardedVideoAdEvent
لا يوجد لديها اي قيمة لنها لا تعمل هذا نوع المشكلة في الكود اعلاه
حتى لو قمت بتجربة سوف تشاهد ان العمل لا يصال الى RewardedVideoAdEvent حتى نحصل على حدث
-
السلام عليكم ورحمة الله وبركاته
تحيه طيبه للجميع
قمت بعمل كلاس منفصل ووضعت فيه اعلانات ادموب من نوع RewardedVideoAd وهو كالتالي:
import 'package:firebase_admob/firebase_admob.dart'; import 'helper.dart'; class AdsReward { static bool _loaded = false; static int _coins=0; static RewardedVideoAd videoAd = RewardedVideoAd.instance; static void initialize() { FirebaseAdMob.instance.initialize(appId: AdManager.appId); } static MobileAdTargetingInfo targetingInfo = MobileAdTargetingInfo( keywords: <String>['flutterio', 'beautiful apps'], testDevices: <String>[], // Android emulators are considered test devices ); static RewardedVideoAd createRewardedVideoAd() { videoAd.load(adUnitId: AdManager.rewardedAdUnitId, targetingInfo: targetingInfo); // videoAd.load(adUnitId:RewardedVideoAd.testAdUnitId, targetingInfo: targetingInfo); RewardedVideoAd.instance.listener = (RewardedVideoAdEvent event, {String rewardType, int rewardAmount}) { if(event == RewardedVideoAdEvent.rewarded) { _coins+=rewardAmount; print('xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx$_coins'); } }; } static void showRewardedVideoAd() { if (videoAd == null) videoAd = createRewardedVideoAd(); videoAd .show().catchError((e) => print("error in showing ad: ${e.toString()}")); } }
اقوم بستدعاء الكلاس من صفحه مختلفه من خلال
AdsReward.showRewardedVideoAd();
الاعلان شغال ولكن المتفرض بعد انتهاء الاعلان احصل على قيمة _coins او بالاصح هيا تحصل على قيمة
ولكن الان لا يحدث هذا الامر قمت بمحاولة قراءة ذلك من خلال امر الطباعة ولكن لا يحدث شي ابد
هل يعلم احد ما هو الخطاء في الكود الذي عملته ؟
لماذا لا يحدث حدث listeners not called
-
قمت بعمل كلاس منفصل لوضع كود الاعلان بداخله كتالتالي:
import 'package:firebase_admob/firebase_admob.dart'; import 'helper.dart'; //const String testDevice = 'YOUR_DEVICE_ID'; class AdsRewardedVideoAd { static bool _loaded = false; static int coins = 0; static RewardedVideoAd videoAd = RewardedVideoAd.instance; static void initialize() { FirebaseAdMob.instance.initialize(appId: AdManager.appId); } static MobileAdTargetingInfo targetingInfo = MobileAdTargetingInfo( keywords: <String>['flutterio', 'beautiful apps'], testDevices: <String>[], // Android emulators are considered test devices ); static RewardedVideoAd createRewardedVideoAd() { videoAd.load(adUnitId: AdManager.rewardedAdUnitId, targetingInfo: targetingInfo); RewardedVideoAd.instance.listener = (RewardedVideoAdEvent event, {String rewardType, int rewardAmount}) { if(event == RewardedVideoAdEvent.rewarded) { coins+=rewardAmount; print('xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx $coins'); } }; } static void showRewardedVideoAd() { if (videoAd == null) videoAd = createRewardedVideoAd(); videoAd .show().catchError((e) => print("error in showing ad: ${e.toString()}")); } }
وبعدها قمت باستدعاء الكلاس في الصفحة المستهدفة كالتالي:
AdsRewardedVideoAd.showRewardedVideoAd();
ولكني واجهة مشكلة احتاج الى الاستعلام عن قيمة coins التي تتغير في الكلاس createRewardedVideoAd() في الصفحة الاولى
من خلال الصفحة الثانية التي وضعت فيها كود العمل هذا :
AdsRewardedVideoAd.showRewardedVideoAd();
كيف ممكن الوصول الى قيمته بعد ان تتغير من الصفحة الثانية او الصفحة المستهدفة ؟ هل توجد طريقة لعمل ذلك؟
-
بتاريخ 14 ساعات قال بلال زيادة:
هل ممكن تزودني بلقطات شاشة من التطبيقات ؟
ايضا هذه الاعلانات من الممكن تكون من صاحب التطبيق و ليست خدمة مشترك فيها مثل ادموب.
والله ما يحضرني تطبيق محدد حاليا بس بحاول ابحث
اشلون ممكن تكون من صاحب التطبيق اخي؟
-
بتاريخ 42 دقائق مضت قال بلال زيادة:
يمكنك إضافة الحزمة التالية إلى مشروع flutter الخاص بك وهي firebase_admob من خلال pub.dev او تجد الرابط هنا
في ملف pubspec.yaml قم بوضع الحزمة مع إصدارها
firebase_admob: ^0.11.0+1
ومن ثم تنفيذ الأمر التالي في terminal
flutter pub get
ثم في المسار التالي android/app/src/main/AndroidManifest.xml قم بوضع
<meta-data android:name="com.google.android.gms.ads.APPLICATION_ID" android:value="ca-app-pub-3940256099942544~3347511713"/>
حيث
ca-app-pub-3940256099942544~3347511713
هو id التطبيق على admob.
في المسار التالي ios/Runner/Info.plis الخاص ب iOS ضع
<key>GADApplicationIdentifier</key> <string>ca-app-pub-3940256099942544~1458002511</string>
يمكنك إنشاء ملف في المسار التالي lib/helper.dart ووضع الكود التالي فيه
import 'dart:io'; class AdManager { static String get appId { if (Platform.isAndroid) { return "<YOUR_ANDROID_ADMOB_APP_ID>"; } else if (Platform.isIOS) { return "<YOUR_IOS_ADMOB_APP_ID>"; } else { throw new UnsupportedError("Unsupported platform"); } } static String get bannerAdUnitId { if (Platform.isAndroid) { return "<YOUR_ANDROID_BANNER_AD_UNIT_ID"; } else if (Platform.isIOS) { return "<YOUR_IOS_BANNER_AD_UNIT_ID>"; } else { throw new UnsupportedError("Unsupported platform"); } } static String get interstitialAdUnitId { if (Platform.isAndroid) { return "<YOUR_ANDROID_INTERSTITIAL_AD_UNIT_ID>"; } else if (Platform.isIOS) { return "<YOUR_IOS_INTERSTITIAL_AD_UNIT_ID>"; } else { throw new UnsupportedError("Unsupported platform"); } } static String get rewardedAdUnitId { if (Platform.isAndroid) { return "<YOUR_ANDROID_REWARDED_AD_UNIT_ID>"; } else if (Platform.isIOS) { return "<YOUR_IOS_REWARDED_AD_UNIT_ID>"; } else { throw new UnsupportedError("Unsupported platform"); } } }
مع تغيير كل id لفئة الإعلان الخاص سواء بانر أو Interstitial.
ومن ثم في الملف الذي تود عرض الإعلانات فيه تضع لتفعيل الإعلانات
Future<void> _initAdMob() { ///Initialize AdMob SDK return FirebaseAdMob.instance.initialize(appId: AdManager.appId); }
يمكن استخدام لتفعيل إعلانات البانر
BannerAd _bannerAd; void _loadBannerAd() { _bannerAd ..load() ..show(anchorType: AnchorType.top); }
و ثم في دالة initState نضع
@override void initState() { _bannerAd = BannerAd( adUnitId: AdManager.bannerAdUnitId, size: AdSize.banner, ); _loadBannerAd(); }
لتشغيل الإعلانات في التطبيق, يمكنك مراجعة التوثيق الخاص بالحزمة ستجد تفاصيل أكثر عن كيفية استخدام كل نوع من الإعلانات و كيفية تنفيذها في تطبيقك
هنا يجب استخدام إعلانات من فئة interstitial ,وتسمى هذه الإعلانات البينية , بحيث هذه الإعلانات تظهر عند الأنتقال من واجهة لواجهة أو عند تنفيذ حدث معين في التطبيق.
بما أنك تستخدم إعلانات من قوقل أدموب فجميع فئات الإعلانات يمكن للمستخدم تخطيها او إغلاقها حسب رغبة المستخدم.
مرحبا اخي الكريم
شاكر لك ردك الغالي والشرح في البدايه
ولكن مما فهمته منك ان هذا النوع من الاعلانات لا يمكن اجبار المستخدم على مشاهدته كامل
طيب هل لديك فكره عن نوع الاعلانات التي يمكن من خلالها فعل ذلك؟ لنني متاكد اني قد شاهدتها في اكثر من تطبيق
-
احاول تطبيق اعلانات AdMob مع فلاتر والامر حتى الان يمشي تمام
ولكن لدي استفسار انا قمت بتطبيق نوعين من الاعلانات وهما : Banner و Interstitial
ولكني احتاج الى معرفة كيف ممكن اعمل اعلان في زر اضافة موضوع مثلا لقد شاهدت سابقا هذا الحركه مسبقا
بحيث ان المستخدم لما يقوم بضغط على زر اضافة موضوع جديد يجب ان يشاهد اجباري مقطع اعلاني لثواني محدده وفي حالة لم يشاهد المقطع كامل او بالاساس هو لا يملك خيار لرجوع او غلق الاعلان بحيث ان المستخدم يكن مجبور على مشاهدة الاعلان كامل لو رغب بنشر موضوع جديد في التطبيق
كيف يمكن عمل ذلك؟
ياليت من يملك خلفيه عن الموضوع يفيدنا ويا حب لو يكون فيه كود مثال على ذلك
-
1
-
-
بتاريخ منذ ساعة مضت قال بلال زيادة:
أخي يبدو أن هناك أجزاء من gradle لم يتم تحميلها بشكل صحيح. لذلك
هناك عدة حلول وهي
- يمكن استدعاء هذه الحزمة مرة أخرى cloud_firestore و العمل على تثبيتها في مشروعك بشكل صحيح ممكن تقرأ أكثر عنها هنا , ومن ثم تشغيل الأمر flutter clean , و من ثم الأمر flutter run, ومن ثم الأمر flutter build apk.
- ممكن أن تقوم بصنع مشروع جديد و من ثم نقل الملفات إليه و المحاولة مرة أخرى. ومن ثم تشغيل الأمر flutter build apk.
- التأكد من الحزم التي تم استخدامها في المشروع و التأكد من أنها ثبتت بشكل صحيح و هناك بعض الحزم مثل cloud_firestore تحتاج إلى إضافة بعض الأوامر إلى الملفات.
- تشغيل الأمر flutter doctor وفحص النتيجة و العمل على حل جميع المشاكل.
مرحبا اخي
وجدت الحل كالتالي للفائده حقيقه لا اعلم فائدته بضبط ولكن اعتقد انه يخفي الاخطاء
lintOptions { checkReleaseBuilds false }
-
بتاريخ 9 ساعات قال بلال زيادة:
ممكن يكون عدة أسباب لذلك, قد تكون مش مفعل multiDexEnabled true
defaultConfig { multiDexEnabled true }
في المسار التالي أو ناسي وضعها android > app > build.gradle, ومن ثم في defaultConfig بدك ترقي gradle في ملف android/build.gradle
classpath 'com.android.tools.build:gradle:3.3.1'
طبعا مع تغيير 3.3.1 إلى أخر أصدار gradle, ومن ثم في المسار التالي
android/app/gradle.properties ستضع التالي
android.useAndroidX=true android.enableJetifier=true
و من ثم تشغيل الأمر التالي
flutter clean
مرحبا اخي
بنسبة الى multiDexEnabled انا عامله
ايضا android.useAndroidX=true
android.enableJetifier=true انا عاملهم كمانبنسبة الى اخل حل
انا لدي كالتالي
classpath 'com.android.tools.build:gradle:3.5.0'
يعني احدث من الي انت عامله ايضا ولكن المشكله مستمره
بتاريخ 21 ساعات قال Wael Aljamal:عليك فتح المشروع باستخدام أندرويد استديو (في حال لا تستخدمه أقترح تحميله لهذه الجزئية التالية)، حيث سيقوم بالبحث عن تحديثات للتضمينات من Gradle وغيرها، عليك فقط تصفح الملفات في مشروع أندرويد وهو سيقوم على اقتراح التحديثات.
تحميل أحدث إصدار من Flutter و أحدث android sdk ووضع الإصدارالخاص به في المشروع، حل الخطأ الأول لديك هو
جعل compileSdkVersion 28 و compileSdkVersion ..مثلا. لكن قم باستخدام الأحدث.
يمكنك بناء مشروع فلاتر جديد بعد التعديلات السابقة، ثم تضمين ملفات إعدادت البيئة منه والتي ستكون في جزء مشروع أندرويد بالشكل التالي في settings.gradle:
ربما يوجد سطر ناقص لديك.
include ':app' def flutterProjectRoot = rootProject.projectDir.parentFile.toPath() def plugins = new Properties() def pluginsFile = new File(flutterProjectRoot.toFile(), '.flutter-plugins') if (pluginsFile.exists()) { pluginsFile.withReader('UTF-8') { reader -> plugins.load(reader) } } plugins.each { name, path -> def pluginDirectory = flutterProjectRoot.resolve(path).resolve('android').toFile() include ":$name" project(":$name").projectDir = pluginDirectory }
في ملف gradle.properties أضف:
android.useAndroidX=true android.enableJetifier=true
أعتقد أن أغلب المشاكل بسبب تضارب إصدار المكتبات (مكتبات فلاتر حديثة أما أندرويد قديمة) فاعمل التعديل على نسخة منفصلة من المشروع في حال حدوث مشاكل غير الحالية (للحفاظ على نسخة من المشروع)
اهلا اخي
كل شي جربته من هذا الخيارات ولكن بدون فائده اخوي
-
بتاريخ 21 ساعات قال Sam Ahw:
حاول إنشاء تطبيقك لمنصة واحدة محددة فقط. Fat APK يعني أن تطبيقك يتم إنشاؤه للعديد من الأنظمة الأساسية. جرب بناؤه مرة واحدة ولكن لمنصة محددة فقط وكما يقترح عليك ضمن رسالة الخطأ يمكنك تجربة إحدى الأوامر:
flutter build appbundle --target-platform android-arm,android-arm64,android-x64
حيث تقوم بتحديد المنصة التي تريد البناء عليها. مثلاً android-x64
يمكنك أيضاً أن تقوم ببناء التطبيق مباشرةً من Android Studio أو Xcode وبذلك سيتم بناؤه لمنصة واحدة.
وأيضاً لاحظت وجود خطأ آخر وهو:Plugin project :firebase_core_web not found. Please update settings.gradle.
ولمعالجة هذه المشكلة يجب أن تقوم بتحديث ملف android/app/build.gradle كالتالي:
من: android { // ... defaultConfig { // ... minSdkVersion 16 } } إلى: android { // ... defaultConfig { // ... minSdkVersion 23 } }
لأنه عند استخدام flutter يجب أن تكون قيمة minSdkVersion 23
مرحبا اخي
انا اعمل من الاندرويد ستوديو نعم
واحاول اعمل apk من الاندرويد ستوديو
بنسبة الى موضوع minSdkVersion انا عامله 23 من قبل ولكن المشكلة مستمرة
-
السلام عليكم ورحمة الله وبركاته
تحيه طيبه للجميع
يا اخوان انا احاول اعمل مشروعي من نوع فلاتر نسخة APK ولكن كل ما احاول اعمل BUILD تجيني المشكله التاليه :
C:\src\flutter\bin\flutter.bat --no-color build apk You are building a fat APK that includes binaries for android-arm, android-arm64, android-x64. If you are deploying the app to the Play Store, it's recommended to use app bundles or split the APK to reduce the APK size. To generate an app bundle, run: flutter build appbundle --target-platform android-arm,android-arm64,android-x64 Learn more on: https://developer.android.com/guide/app-bundle To split the APKs per ABI, run: flutter build apk --target-platform android-arm,android-arm64,android-x64 --split-per-abi Learn more on: https://developer.android.com/studio/build/configure-apk-splits#configure-abi-split Running Gradle task 'assembleRelease'... Plugin project :firebase_core_web not found. Please update settings.gradle. Note: C:\src\flutter\.pub-cache\hosted\pub.dartlang.org\cloud_firestore-0.12.11\android\src\main\java\io\flutter\plugins\firebase\cloudfirestore\CloudFirestorePlugin.java uses or overrides a deprecated API. Note: Recompile with -Xlint:deprecation for details. Note: C:\src\flutter\.pub-cache\hosted\pub.dartlang.org\cloud_firestore-0.12.11\android\src\main\java\io\flutter\plugins\firebase\cloudfirestore\CloudFirestorePlugin.java uses unchecked or unsafe operations. Note: Recompile with -Xlint:unchecked for details. Removed unused resources: Binary resource data reduced from 235KB to 212KB: Removed 9% FAILURE: Build failed with an exception. * What went wrong: Execution failed for task ':path_provider:verifyReleaseResources'. > A failure occurred while executing com.android.build.gradle.internal.tasks.Workers$ActionFacade > Android resource linking failed C:\Users\*****\.gradle\caches\transforms-2\files-2.1\733257008ca62c5b6ddfd0e885c42d88\core-1.1.0\res\values\values.xml:142:5-173:25: AAPT: error: resource android:attr/fontVariationSettings not found. C:\Users\*****\.gradle\caches\transforms-2\files-2.1\733257008ca62c5b6ddfd0e885c42d88\core-1.1.0\res\values\values.xml:142:5-173:25: AAPT: error: resource android:attr/ttcIndex not found. * Try: Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights. * Get more help at https://help.gradle.org BUILD FAILED in 1m 19s Running Gradle task 'assembleRelease'... 80.8s The built failed likely due to AndroidX incompatibilities in a plugin. The tool is about to try using Jetfier to solve the incompatibility. Building plugin cloud_firestore... Running Gradle task 'assembleAarRelease'... The plugin cloud_firestore could not be built due to the issue above. Process finished with exit code 1
في احد يعرف سبب المشكله هذا او كيف يمكن حلها؟
-
2
-
توقف تثبيت مشروع فلاتر على الايفون
في روبي
نشر
كنت اشتغل على مشروع فلاتر في iOS ولكن فجاه صار تظهر معي هذا المشكلة مع محاولة تثبيت التطبيق لا اعلم السبب او ما تغير ياليت اذا احد يعرف شو الحل يساعدنا