رفتن به مطلب

پست های پیشنهاد شده

Radiomedia    26

با سلام

پست ویژه ما: کتابخانه پوش نوتیفیکیشن ماتیسا - MaatisaPush Library 1.05

اول بگم در کانال اینو پولی گذاشته بودم اما چون کم کاربرد بود و نمونه های رایگان و محدود موجود بود، رایگانش کردم تا بیشتر مورد استفاده قرار بگیره و بجاش برای شادی روح شهدای دفاع مقدس بخصوص عموهای من (شهیدان محمد و علی فرخی) یه صلوات بفرستید، سپاسگزارم.

پوش نوتیفیکیشن؟
سرویسی که قادر است در حالت پس‌زمینه هرزمانی که تلفن به اینترنت متصل است (مخصوصا زمانی که اپلیکیشن‌های ما در حالت اجرا نیستند)، پیام موردنظر ما را که در سرویس ابری خود قرار داده ایم در Notification area گوشی کاربر نشان دهد.

درحال حاضر سرویس های مختلفی برای انجام این امر وجود دارد، و حتی گوگل هم سرویسی با نام Firebase ارائه داده است.

مزایای این سرویس ها:
- نیازی به سرور و یا هاست خودی نیست و پیام‌های ما در سرویس ابری آنها ذخیره می‌شود.
- نیازی به نوشتن یک خط کد هم نیست، همه کارها با IDE طراحی شده خودشان انجام خواهد شد و با اسکریپت های آماده می‌توان در برنامه خود راه اندازی کرد.
و...

معایب:
- این سرویس ها کاملا نامحدود نیستند و محدودیت‌هایی دارند، از جمله:
• تعداد کاربرانی که می‌توانید برای آنها پیام ارسال کنید.
• تعداد پیام‌هایی که در بازه زمانی مشخص می‌توانید ارسال کنید.
• نوع و ظاهر پیام ارسالی: شامل عکس دار بودن و...
این موارد با پرداخت هزینه هایی قابل ارتقا هستند.
- سفارشی سازی کامل پیام ارسالی
و...

ما این موارد را سطحی و کلی بیان کردیم، پس ممکن است سرویس هایی باشند که در ارائه خدمات تنوع بیشتر یا کمتری ارائه دهند.

اما کتابخانه ای که ما ارائه کردیم چگونه است؟
{ابتدا باید توجه داشته باشید که تعداد پیام‌های ارسالی، تعداد کاربران و... همه موارد به سرویس ابری خودتان بستگی دارد، و اگر منابع تخصیصی خودتان را تمام کنید تا شارژ مجدد نمی‌توانید از سرویس خود استفاده ای کنید، پس موقع خرید سرویس ابری حتما با توجه به نیاز خود سرویس موردنظر را خریداری کنید.
همچنین می‌توانید صرفا برای انجام تست از سرویس های رایگان نیز استفاده کنید}
پس از خرید کتابخانه و استخراج آن از فایل زیپ شاهد ۳ فایل زیپ دیگر خواهید بود:
• فایل کتابخانه
• فایل های سمت سرور
• سمپل کتابخانه

دو فایل jar و xml موجود در زیپ Library را در پوشه Additional Libraries کپی کنید.

در زیپ ServerSide دو فایل وجود دارد.
• فایل MaatisaPush.php
این فایل را در مکانی دلخواه در هاست خود کپی کنید. و آدرس آن را برای قراردادن در کد به خاطر بسپارید.
همچنین باید این فایل را با استفاده از ویرایشگر متنی باز کنید و اطلاعات دیتابیس خود را در خطوط ۶ تا ۹ وارد کنید.
خط ۶ - آدرس یا آی‌پی هاست دیتابیس
خط ۷ - نام کاربری Username دیتابیس
خط ۸ - پسورد دیتابیس
خط ۹ - نام دیتابیس

• فایل pushnotify.sql
این فایل را هم در دیتابیس mysql هاست خود import کنید.
-  اگر مایل به اینکار نبودید می‌توانید با مقادیر زیر یک جدول در دیتابیس خود با استفاده از phpMyAdmin بسازید:
-  ID - Auto Increase - Index
برای بررسی آخرین پیام وارد شده استفاده می‌شود
-  status - TEXT
برای تعیین وضعیت رفتار نوتیفیکیشن استفاده می‌شود و مقادیر 'app' یا 'link' می‌گیرد که اگر app باشد، هنگام کلیک کاربر، اکتیویتی تعیین شده باز خواهد شد. و اگر link باشد، آدرس وب وارد شده در فیلد link با intent باز خواهد شد.
- titr - TEXT
متن نوشته عنوان یا نوشته بزرگ نوتیفیکیشن
-  body - TEXT
متن بدنه نوتیفیکیشن
-  link - TEXT
لینک وب، برای زمانی که مقدار فیلد status برابر link باشد.
× فعلا برای ورود اطلاعات در دیتابیس باید دستی اینکار را انجام دهید، یعنی هربار که می‌خواهید پیغام جدیدی برای کاربران ارسال کنید، رکورد جدیدی هم باید ایجاد کنید.

پس از انجام این کارها برای نمونه می‌توانید پروژه نمونه را بازکنید و طریقه پیاده سازی این کتابخانه را ببینید و کدهای موجود در پروژه نمونه را در پروژه خود کپی کنید.

-  نمونه سورس و آموزش پیاده سازی:
ابتدا کتابخانه MaatisaPush را تیک بزنید.

Sub Globals
    Dim mp As MaatisaPush
End Sub

Sub Activity_Create(FirstTime As Boolean)
 
    mp.Initialize( "main" , "mp" , False) 
 
    mp.setValues(10 , 0 , "http://maatisa.ir/app/" , "pushnotify" , "" , "main")
 
    LogColor( $"${mp.About}"$ , Colors.Yellow)

    mp.startPush
 
End Sub

Sub Activity_LongClick
    mp.ListenStatus = Not(mp.ListenStatus)
    Log($"Enabled:   ${mp.ListenStatus}"$)
End Sub

Sub mp_pushReceived(success As Boolean, pushInfo As MaatisaPushArgs)
    ' LogColor($"pushReceived Event: ${success} & er: ${pushInfo.error}"$, Colors.Green) '
  If success Then
     Dim ph As PhoneIntents
     Dim n As Notification
     n.Initialize
     If pushInfo.status = "app" Then
         n.SetInfo(pushInfo.titr, pushInfo.body, Me) 
     Else If pushInfo.status = "link" Then
         n.SetInfo(pushInfo.titr, pushInfo.body ,ph.OpenBrowser(pushInfo.link))
     End If
     n.Notify(2)
  Else
     LogColor($"Error: ${pushInfo.error}"$, Colors.Magenta)
  End If
End Sub

Sub Activity_KeyPress (KeyCode As Int) As Boolean 'Return True to consume the event'
    If KeyCode = KeyCodes.KEYCODE_BACK Then
        ExitApplication
    End If
    Return True
End Sub

اسکرین از لاگ برنامه :

shot.png

 

اسکرین شات از صفحه کد نمونه:

sc.png

 

دانلودها: 

دانلود فایل پیش نمایش apk

دانلود کتابخانه + فایل های سمت سرور(php و sql) + پروژه نمونه

توضیح خط به خط کدها رو هم آماده میکنم همین پست رو ویرایش میکنم ببخشید که سرم یذره شلوغه

ایشاله کاربردی باشه و لبتون خندون

 

  • پسندیدن 2

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر
Radiomedia    26
در 15 ساعت قبل، b4xcenterb گفته است :

اما این dependsOn قرار داده نشده 

سلام، ممنون بابت فیدبک، اما من متوجه نشدم، این خط در فایل xml در خط 7 موجوده، و البته کتابخانه هم بدون مشکل کار میکنه. اما اگر هرگونه ایرادی هست، امر بفرمایید اصلاح میشه.

فایل xml :

<?xml version="1.0" encoding="utf-8"?>
<root>
  <doclet-version-NOT-library-version>1.00</doclet-version-NOT-library-version>
  <b4x_version>9.80</b4x_version>
  <dependsOn>json</dependsOn>
  <dependsOn>phone</dependsOn>
  <dependsOn includesSingletonModules="true">maatisaokhttputils2</dependsOn>
  <dependsOn>okhttp</dependsOn>
  <dependsOn>stringutils</dependsOn>
  <dependsOn>okhttp-3.5.0</dependsOn>
  <dependsOn>okio-1.11.0</dependsOn>
  <class b4a_type="Service">
    <name>ir.maatisa.pushnotify.push</name>
    <shortname>push</shortname>
    <owner>process</owner>
    <objectwrapper>java.lang.Class</objectwrapper>
    <permission>android.permission.VIBRATE</permission>
    <field>
      <name DesignerName="tmr">_tmr</name>
      <returntype>anywheresoftware.b4a.objects.Timer</returntype>
    </field>
    <field>
      <name DesignerName="linkR">_linkr</name>
      <returntype>String</returntype>
    </field>
    <field>
      <name DesignerName="str2">_str2</name>
      <returntype>String</returntype>
    </field>
    <field>
      <name DesignerName="jsonob">_jsonob</name>
      <returntype>anywheresoftware.b4a.objects.collections.JSONParser</returntype>
    </field>
    <field>
      <name DesignerName="mapob">_mapob</name>
      <returntype>anywheresoftware.b4a.objects.collections.Map</returntype>
    </field>
    <field>
      <name DesignerName="ac">_ac</name>
      <returntype>Object</returntype>
    </field>
    <field>
      <name DesignerName="inter">_inter</name>
      <returntype>int</returntype>
    </field>
    <field>
      <name DesignerName="phpLink">_phplink</name>
      <returntype>String</returntype>
    </field>
    <field>
      <name DesignerName="ico">_ico</name>
      <returntype>String</returntype>
    </field>
    <field>
      <name DesignerName="table">_table</name>
      <returntype>String</returntype>
    </field>
    <field>
      <name DesignerName="tout">_tout</name>
      <returntype>int</returntype>
    </field>
    <field>
      <name DesignerName="mapS">_maps</name>
      <returntype>anywheresoftware.b4a.objects.collections.Map</returntype>
    </field>
    <field>
      <name DesignerName="listen_pushStatus">_listen_pushstatus</name>
      <returntype>boolean</returntype>
    </field>
    <field>
      <name DesignerName="serv_notify">_serv_notify</name>
      <returntype>boolean</returntype>
    </field>
    <field>
      <name DesignerName="callAc">_callac</name>
      <returntype>Object</returntype>
    </field>
    <field>
      <name DesignerName="EvName">_evname</name>
      <returntype>String</returntype>
    </field>
    <method>
      <name>process_globals</name>
      <returntype>void</returntype>
    </method>
  </class>
  <class>
    <name>ir.maatisa.pushnotify.maatisapush</name>
    <shortname>MaatisaPush</shortname>
    <comment>A MaatisaPush Class that handles "push" service.
Author: Mohsen Torabi
Sample code in &lt;code&gt;mp.About&lt;/code&gt; Description

More Info: &lt;link&gt;Telegram|https://t.me/maatisa_swdg&lt;/link&gt;
</comment>
    <owner>process</owner>
    <event>pushReceived(success as Boolean, pushInfo as MaatisaPushArgs)</event>
    <method>
      <name>IsInitialized</name>
      <comment>Tests whether the object has been initialized.</comment>
      <returntype>boolean</returntype>
    </method>
    <method>
      <name DesignerName="About">_about</name>
      <comment>This library and php file was created by Mohsen Torabi from Maatisa.ir
Contact me: MohsenTorabi086@gmail.com

More Info: &lt;link&gt;Telegram|https://t.me/maatisa_swdg&lt;/link&gt;

Sample: &lt;code&gt;

#BridgeLogger: True
Sub Globals
	Dim mp As MaatisaPush
End Sub
Sub Activity_Create(FirstTime As Boolean)
	mp.Initialize( "main" , "mp" , True)
	mp.setValues(0 , 0 , "http://yrDomain.ir/" , "pushnotify" , "" , "main")
	LogColor($"${mp.About}"$ , Colors.Yellow)
	mp.startPush
End Sub

'You must do it in a service that whenever user exit application, then you can receive datas from your service.
Sub mp_pushReceived(success As Boolean, pushInfo As MaatisaPushArgs)
	LogColor($"pushReceived Event: ${success} &amp; er: ${pushInfo.error}"$, Colors.Green)
	If success Then
		Dim ph As PhoneIntents 'Needs Phone library
		Dim n As Notification
		n.Initialize
		If pushInfo.status = "app" Then
			n.SetInfo(pushInfo.titr, pushInfo.body, Me) ' //ac = Main
		Else If pushInfo.status = "link" Then
			n.SetInfo(pushInfo.titr, pushInfo.body ,ph.OpenBrowser(pushInfo.link))
		End If
		n.Notify(2)
	End If
End Sub
&lt;/code&gt;
</comment>
      <returntype>String</returntype>
    </method>
    <method>
      <name DesignerName="getListenStatus" HideFromIDE="true">_getlistenstatus</name>
      <returntype>boolean</returntype>
    </method>
    <method>
      <name DesignerName="Initialize">_initialize</name>
      <comment>callback - is the module that handle the pushReceived Event. like "main" or "yourActivityName"
EventName - that will be used for pushReceived Event.
showServiceNotification - If True, Service shows a notification itself.
If False, You must set the valid callback [Activity or Service] and Event name, and you can create your custom notification.
&lt;code&gt;mp.Initialize( "main" , "mp" , True) &lt;/code&gt;
</comment>
      <returntype>String</returntype>
      <parameter>
        <name>ba</name>
        <type>anywheresoftware.b4a.BA</type>
      </parameter>
      <parameter>
        <name>callback</name>
        <type>String</type>
      </parameter>
      <parameter>
        <name>EventName</name>
        <type>String</type>
      </parameter>
      <parameter>
        <name>showServiceNotification</name>
        <type>boolean</type>
      </parameter>
    </method>
    <method>
      <name DesignerName="phpCode">_phpcode</name>
      <comment>Return PHP code that must upload in your host.
PHP Code: &lt;code&gt;
&lt;?php
	// Mohsen Torabi - Maatisa.ir - Contact Me: MohsenTorabi086@gmail.com
	$q1 = $_GET['q1'];
	$tname = $_GET['tname'];

	$host = 'localhost';
	$user = 'root';
	$pass = '';
	$db = 'yourDBname';

	$con = @mysqli_connect($host,$user,$pass,$db);
	mysqli_set_charset($con,'UTF8');
	If (!mysqli_connect_error()) {
		$tmax = mysqli_query($con,$q1);
		$rmax = mysqli_fetch_assoc($tmax);
		$mmax = $rmax['mnotify'];
		If($mmax &gt; 0){
			$query = "SELECT * FROM $tname WHERE ID=$mmax";
			$table = mysqli_query($con,$query);
			$row = mysqli_fetch_assoc($table);
			$arr['title'] = 'pushok';
			$arr['ID'] = $row['ID'];
			$arr['status'] = $row['status'];
			$arr['titr'] = $row['titr'];
			$arr['body'] = $row['body'];
			$arr['link'] = $row['link'];
			echo json_encode($arr);
		} Else {
			$arr['title'] = 'pushfailed';
			echo json_encode($arr);
		}
	} Else { //!mysqli_connect_error()
		$arr['title'] = 'dbfailed'; echo json_encode($arr);
	}
	mysqli_close($con);
?&gt;
&lt;/code&gt;
</comment>
      <returntype>String</returntype>
    </method>
    <method>
      <name DesignerName="setListenStatus" HideFromIDE="true">_setlistenstatus</name>
      <comment>You can set "True" or "False" to Pause or Resume listening Push Service.
Or get listening Status
&lt;code&gt;mp.ListenStatus = Not(mp.ListenStatus)&lt;/code&gt;
</comment>
      <returntype>String</returntype>
      <parameter>
        <name>status</name>
        <type>boolean</type>
      </parameter>
    </method>
    <method>
      <name DesignerName="setValues">_setvalues</name>
      <comment>Sets values for receiving Data
interval - interval of timer that check new notification. Default is : 60 - in Seconds.
Timeout - of http GetRequest. Default is : 3000 - in ms. [Temporary: Disabled]
phplink - just like this [with http:// or https:// ] :  "https://yoursite.ir/" without "MaatisaPush.php"
TableName - Your db table name for queries.
icon - Small icon on notification.
Activity - used for Notification Click event. Like: "main" or "yourActivityName"
- For all be careful (Case Sensitive)

- Your DataBase table must be contains these Fields:
ID - Sure that is "Auto Increment", to finding out which record is fresh.
status - For notification that open app or open a URL. Must be "app" or "link"
titr - Title of notification.
body - Body of notification.
link - It use for open URL. Can be empty for status "app".
&lt;code&gt;mp.setValues(0 , 0 , "http://yrDomain.ir/" , "pushnotify" , "" , "main")&lt;/code&gt;
</comment>
      <returntype>String</returntype>
      <parameter>
        <name>interval</name>
        <type>int</type>
      </parameter>
      <parameter>
        <name>Timeout</name>
        <type>int</type>
      </parameter>
      <parameter>
        <name>phpLink</name>
        <type>String</type>
      </parameter>
      <parameter>
        <name>TableName</name>
        <type>String</type>
      </parameter>
      <parameter>
        <name>icon</name>
        <type>String</type>
      </parameter>
      <parameter>
        <name>Activity</name>
        <type>String</type>
      </parameter>
    </method>
    <method>
      <name DesignerName="startPush">_startpush</name>
      <comment>Starts push service
You must first call Initialize and setValues.
It must call at last and never repeat it again.
You can call ListenStatus to "Pause" or "Resume" Service later.
</comment>
      <returntype>String</returntype>
    </method>
    <property>
      <name DesignerName="ListenStatus">_listenstatus</name>
      <comment>You can set "True" or "False" to Pause or Resume listening Push Service.
Or get listening Status
&lt;code&gt;mp.ListenStatus = Not(mp.ListenStatus)&lt;/code&gt;
</comment>
      <returntype>boolean</returntype>
      <parameter>
        <name>Value</name>
        <type>boolean</type>
      </parameter>
    </property>
  </class>
  <class>
    <name>ir.maatisa.pushnotify.push._maatisapushargs</name>
    <shortname>MaatisaPushArgs</shortname>
    <owner>process</owner>
    <method>
      <name>Initialize</name>
      <comment>Initializes the fields to their default value.</comment>
      <returntype>void</returntype>
    </method>
    <field>
      <name>IsInitialized</name>
      <comment>Tests whether the object has been initialized.</comment>
      <returntype>boolean</returntype>
    </field>
    <field>
      <name>titr</name>
      <returntype>String</returntype>
    </field>
    <field>
      <name>body</name>
      <returntype>String</returntype>
    </field>
    <field>
      <name>link</name>
      <returntype>String</returntype>
    </field>
    <field>
      <name>status</name>
      <returntype>String</returntype>
    </field>
    <field>
      <name>error</name>
      <returntype>String</returntype>
    </field>
  </class>
  <version>1.05</version>
  <author>Mohsen Torabi  - Telegram: https://t.me/maatisa_swdg</author>
</root>

 

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

مهمان
ارسال پاسخ به این موضوع ...

×   شما در حال چسباندن محتوایی با قالب بندی هستید.   حذف قالب بندی

  تنها استفاده از 75 اموجی مجاز می باشد.

×   لینک شما به صورت اتوماتیک جای گذاری شد.   نمایش به عنوان یک لینک به جای

×   محتوای قبلی شما بازگردانی شد.   پاک کردن محتوای ویرایشگر

×   شما مستقیما نمی توانید تصویر خود را قرار دهید. یا آن را اینجا بارگذاری کنید یا از یک URL قرار دهید.


×
×
  • جدید...