کیان
11 ماه پیش توسط کیان مطرح شد
5 پاسخ

ارسال نوتیفیکیشن به یک آرایه در فایربس گوگل

سلام دوستان
من از لاراول به عنوان api و بک اند برنامه اندرویدی استفاده کردم
توی اندروید به محض ثبت نام توکن فایربیس اون دستگاه هم گرفته میشه و همراه بقیه اطلاعات در دیتابیس ذخیره میشه
حالا می‌خوام بر اساس دسته بندی های خودم به گروهی از اون ها نوتیفیکیشن ارسال کنم اومدم همون دسته رو صدا زدم و یک آرایه از توکن هاشون درست کردم و بر اساس یک فانکشن که کارش ارسال نوتیفیکیشن بر اساس توکن هست این کار رو انجام میدم

الان که توی مرحله تست هستم به خوبی اتفاق میفته ولی ممکنه بعداً تعداد اون دسته به چند هزار نفر برسه خواستم بدونم بهترین راهکار برای این جور مواقع چی هست
با تعریف جاب و صف مشکل حل میشه یا کرون جاب و چیزای دیگه رو باید دنبال کنم

سپاس


ثبت پرسش جدید
میکائیل
تخصص : برنامه نویسی سمت سرور و کلاینت
@FullStack 11 ماه پیش آپدیت شد
0

سلام دوست عزیز
اول اینکه میخواید برای کل یوزر ها نوتیفیکیشن بفرستید؟ مثلا تبلیغات؟ و اینکه یه توضیح کلی بده میخوای چیکار کنی تا حداقل یه راه حلی چیزی به ذهن ادم بیاد چون من الان ذهنیتی ندارم که تو ارسال نوتیفیکیشن به همه کار بر هارو برای چه کاری میخوای نمیدونم چی بهت بگم اما اگه بدونم چیکار میخوای بکنی ممکنه راه حل بهتری بهت بگم


کیان
تخصص : ندارم ...
@kian.myphone 11 ماه پیش آپدیت شد
0

سلام @FullStack عزیز ممنون از پاسخ گویی تان و پوزش بابت تاخیر در ارسال مجدد
واقعیتش برای اینکه سوال کوتاه تر بشه من از توضیحات اضافی پرهیز کردم

ببینید من طبق معمول یه جدول user دارم و توکن فایربیس کاربرها درونش ذخیره میشن
توی قسمت های مختلف برنامه کاربرها ممکنه بر اساس نیاز توی جداول دیگه ای هم عضو بشن که همگی با userid به جدول یوزر ریلیشن شدند بنابراین برای انجام عملیات من میام اون جدول مورد نظر که میخوام به عضوهاش یا همون رکوردهاش نوتیفیکیشن ارسال کنم رو میگیرم و با ریلیشن از جدول یوزر تمامی توکن هاشون رو داخل یک آرایه بر میگردونم و در نهایت یک آرایه دارم که میتونم با اون فانکشنی که وجود داره به توکن ها یکی یکی نوتیفیکیشن رو ارسال کنه قاعدتا فکر میکنم این عملیات یکی یکی انجام میشه بنابراین وقتی تعداد عضوهای آرایه بزرگ و بزرگتر میشه فکر میکنم نیاز باشه که این کار با صف و جاب انجام بشه
فانکشنی که کار ارسال نوتیف رو به آرایه انجام میده چیزی شبیه این هست البته یه مقدار کدها رو خلاصه کردم :

    public static function toIds($array,$title,$body)
    {
        $url = 'https://fcm.googleapis.com/fcm/send';
        $serverKey = env('FCM_SERVER_KEY_CLIENT');

        $data = [
            "registration_ids" => $array,
            "data" => [
                "title" => $title,
                "body" => $body,
            ]
        ];
        $encodedData = json_encode($data);
        $headers = [
            'Authorization:key=' . $serverKey,
            'Content-Type: application/json',
        ];

        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        $result = curl_exec($ch);
        if ($result === FALSE) {
            die('Curl failed: ' . curl_error($ch));
        }
        curl_close($ch);
        return response()->json([
            'result' => $result
        ]);
    }

و نکته آخر در صورتی که بخوام به کل کاربرهای اپلیکیشن نوتیف ارسال کنم از قابلیت topic خود فایربیس استفاده میکنم و توضیحش برای دوستانی که آگاهی ندارن ازش اینطوری هست توی اندروید به وسیله یک خط کد ساده که خود گوگل در اختیار گذاشته کاربر را داخل یه تاپیک عضو میکنیم و بعد از اون میتونیم به اون تاپیک ارسال نوتیف داشته باشیم که خود گوگل کار ارسال برای همه اعضا رو انجام میده

سپاس


میکائیل
تخصص : برنامه نویسی سمت سرور و کلاینت
@FullStack 11 ماه پیش مطرح شد
0

ببین تا اونجایی که من میدونم جاب ها برای مدیریت درخواست های کاربرانه یعنی مثلا سرور نیاد چندتا درخواست رو با هم هندل کنه که حالا اگه تعداد درخواست ها زیاد باشه ممکنه سرور داون بشه و نتونه پاسخ بده به این همه درخواست واسه همین هر شخص که درخواستی بزنه میاد توی یک صف قرار میگیره و هر درخواست به نوبت انجام میشه ولی این کاری که شما میخوای بکنی یک کاربر میاد و یک درخواست به سرور میزنه و درخواست دیگه ای نیست که بخوای از جاب استفاده کنی و اینکه اگه بخوای استفاده کنی باید برای هر یوزر که میخوای براش نوتیفیکیشن ارسال بشه یک فیلد به جدول جاب ها اضافه بشه داخل حلقه foreach و یک نوتیفیکیشن توی لاراول تعریف کنی که بیاد تا زمانی که فیلد توی جاب هست یه کاری رو انجام بده مثلا به سرور فایربیس درخواست بزنه و نوتیفیکیشن بفرسته به توکن یوزر و اینکه با اینکار اگه 10 تا یوزر هم زمان وارد یه جدول بش بعد چندین هزار فیلد قراره به جدول جاب اضافه بشه حالا تاحالا تست نکردم که جواب میده یا نه ولی بالاخره برنامه نویسی ازمون و خطا زیاد داره هرچیزی رو باید تست کرد و اگه مشکل بخوره دیگه دست خودته که روش جدید رو پیاده کنی و آپدیت بدی اصن آپدیت دادن برای همینه ممکنه یه چیزی رو پیاده کنی اما مطمعن نباشی برای تعداد خاصی از یوزر ها کار میده یا نه ممکنه اوکی باشه ممکنه هم کار نده بعد میاد بروزرسانی برای برنامت میدی


کیان
تخصص : ندارم ...
@kian.myphone 11 ماه پیش آپدیت شد
0

@FullStack عزیز ممنون از توضیحات تون استفاده کردم
ببین من دقیقا اونجایی برام سوال هست که وقتی من یک آرایه به این فانکشن ارسال نوتیفیکیشن تحویل میدم دقیقا چه اتفاقی میفته یعنی میاد از ایندکس اول یکی یکی توکن رو میگیره و کار ارسال رو انجام میده یا نه اتفاق دیگه ای میفته که اگر یکی یکی اتفاق بیفته قاعدتا مشکل ساز میشه و باید یه فکری براش کرد

دوم اینکه توی یه تاپیک توی سایت استک یه مورد برخورد کردم که گشتم توی داکیومنت گوگل ندیدمش ولی میگه وقتی میخوایم از گزینه ارسال به چندین دیوایس یعنی Registration IDs استفاده کنیم ماکزیموم ۱۰۰۰ تا توکن رو میشه بهش پاس داد و اگر بخوایم بیشتر از اون رو هندل کنیم خودمون باید بیام گروه بندی کنیم یعنی ۱۰۰۰ تای اول رو بگیریم و یکبار ارسال رو انجام بدیم و باقی ماجرا حالا از طریق صف یا هر چیز دیگه ای که امکان داشته باشه

در کل دنبال اینم که از الان پیش بینی های لازم رو داشته باشم درسته برم توی کار بعدش میشه آپدیت داد و مشکل رو حل کرد اما تا حد امکان از الان میخوام موارد رو رعایت کنم ممنون میشم اگر چیزی به ذهن تون میرسه راهنمایی کنید و همچنین دیگر اساتید عزیز که در ادامه تگش میکنم سپاسگزارم

ضمنا این لینک اون تاپیک استک هست که گفتم : لینک

@hesammousavi
@juza66
@endworld
@faridaghili
@wozniak


میکائیل
تخصص : برنامه نویسی سمت سرور و کلاینت
@FullStack 11 ماه پیش مطرح شد
0

خوب وقتی توی یک ارایه بزاری قاعدتا میاد دونه به دونه یوزر هارو میگیره و توکن یوزر رو ور میداره و نوتیفیکیشن رو به اون توکن ارسال میکنه

و اینکه واسه همین میگم حالا میتونی از جاب ها و نوتیفیکیشن های لاراول استفاده کنی که بیاد این عملیات رو هندل کنه و برای هر یوزری که قراره براش نوتیفیکیشن ارسال بشه یک جاب جداگونه بزنه و به صورت صف قرار بگیره و دونه دونه بیاد این درخواست های داخل صف رو انجام بده و برای کاربر ها نوتیفیکیشن ارسال کنه الان منتطقش اینه میگم میتونی این کار رو انجام بدی حالا اگر در اینده که فکر نمیکنم ولی اگه به مشکل خوردی میتونی روش جدیدی به کار بگیری ولی اینو میدونم که این روش اگه کار کنه ممکنه تا سال ها اوکی باشه چون یک دفعه نمیاد و چندین هزار یوزر برای برات بیاد و بخوای هندل کنی ولی فکر نکنم مشکلی پیش بیاد خیلی بهتر از اون روش foreach هست چون اصن کار بهینه ای نیست چندین درخواست توی یک حلقه به فایربیس بزنی که پوش نوتیفیکیشن بفرسته هم کار زمانبریه هم اینکه ممکنه نتونه انجام بده و اگه کرشی چیزی بخوره ادامه کار رو انجام نمیده یا ممکنه اررور تایم اوت بده ولی جاب ها سر فرصت میاد دونه دونه این کار هارو انجام میده و اصلا کاری به کاربر نداره که منتظر بمونه جواب بره چون دیتا ها توی یه جدول با یک اطلاععتی ذخیره میشه و جاب کارش اینه بیاد اطلاعات اون جدول رو بخونه و کار رو انجام بده سمت سرور


برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام