onesignal pushe.co s-3.664-0.699-5.062-2.099c-1.397-1.398-2.097-3.087-2.097-5.065s0.699-3.667,2.097-5.065c1.397-1.399,3.085-2.099,5.062-2.099 s3.664,0.699,5.062,2.099C223.888,120.556,224.587,122.244,224.587,124.223z"/>

برای مهاجرت از وان سیگنال به پوشه کلیک کنید.

Basic4Android

راه‌اندازی

ایمپورت کردن کتابخانه

  • نکته ی مهم : برای استفاده از پوشه بایستی نسخه ی B4A حداقل 6 باشد.
  • برای استفاده از لایبرری باید از android.jar نسخه ی 26 و یا بالاتر استفاده کنید.

کتابخانه پوشه و ملزومات B4A را از این لینک دانلود کنید و محتوای پوشه ی درون زیپ را در پوشه ی Libraries برنامه ی B4A قرار دهید. درصورتی که یکی یا بیشتر از فایل ها قبلا وجود دارند میتوانید گزینه ی replace را انتخاب کنید.

در نرم افزار B4A در پنجره Libraries کلیک راست کنید و صفحه را Refresh کنید و کتابخانه PushePlugin را انتخاب کنید.

تغییرات AndroidManifest.xml

وارد پنل پوشه شوید و اپلیکیشن خود ثبت کنید. توجه داشته باشید که از همان Package Name استفاده کنید که در Build Configuration خود ثبت کرده اید. فایل منیفست مربوط به B4A را دانلود کنید. منیفست پروژه را از طریق Project > Manifest Editor در نرم افزار B4A باز کنید و محتویات داخل فایل را در آن جایگذاری کنید. برخی از دسترسی ها (permissions) برای پوشه اختیاری است. این دسترسی ها برای ارسال هدفمند اعلان به کاربران است. شما قادر خواهید بود با استفاده از این دسترسی ها کاربران خود را دسته بندی کنید و اعلانهای خود را هدفمند ارسال کنید.

افزودن کد

در کلاس Main در قسمت Sub Globals کد زیر را قرار دهید:

Dim pushe As Pushe

در کلاس Main در قسمت Activity Create کد زیر را وارد کنید:

pushe.initialize()

تست

پس از اینکه فایل کتابخانه را مطابق با آموزش داده شده نصب کردید، میتوانید پروژه را اجرا و بر روی دستگاه خود نصب و تست کنید.

  • نکته: اگر برنامه خود را از نسخه ی قبلی پوشه به نسخه ی جدید بروزرسانی می کنید، مطمئن شوید که کتابخانه های جدید را استفاده می کنید و تیک نسخه قبلی پوشه را در قسمت لایبرری بردارید. برای اطمینان می توانید فایل های مربوط به نسخه قبلی پوشه را از مسیر C:\Program Files (x86)\Anywhere Software\Basic4android\Libraries حذف کنید تا اشتباها استفاده نشوند.
  • به صفحه نصب ها بروید.
  • بعد از گذشت زمان کوتاهی یک ردیف مشخصات نصب به لیست نصب ها اضافه می شود که متعلق به گوشی شما است.
  • یک اعلان تست ارسال کنید.دقت کنید تلفن همراه شما به اینترنت متصل باشد.
    توصیه می شود اپلیکیشن را بر روی موبایل یا تبلت اجرا و تست کنید. اگر می خواهید اپلیکیشن را بر روی Emulator تست کنید، بر روی ایمولاتور شما باید Google API نصب باشد.

امکانات

دریافت اطلاعات دلخواه با فرمت JSON

شما میتوانید از طریق پنل برای اپلیکیشن خود اطلاعات دلخواه در قالب یک JSON ارسال کنید. برای اینکه بتوانید از این اطلاعات در اپلیکیشن خود استفاده کنید مراحل زیر را انجام دهید. برای دریافت JSON شما باید یک receiver بسازید. فایل های لازم را از این لینک دریافت کنید. از مسیر project > add existing module در نرم افزار B4A ، ماژول PusheJsonService.bas را انتخاب کنید. کد زیر را در منیفست خود اضافه کنید:

AddManifestText(
<permission android:name="$PACKAGE$.permission.C2D_MESSAGE" android:protectionLevel="signature" />)
AddPermission($PACKAGE$.permission.C2D_MESSAGE)
AddPermission(com.google.android.c2dm.permission.RECEIVE)
' Push Service Receiver Attribute
SetReceiverAttribute(PusheJsonService, android:permission, "com.google.android.c2dm.permission.SEND")
' Service Receiver Text
AddReceiverText(PusheJsonService,
<intent-filter>
<action android:name="com.google.android.c2dm.intent.RECEIVE" />
<category android:name="$PACKAGE$" />
</intent-filter>
<intent-filter>
<action android:name="com.google.android.c2dm.intent.REGISTRATION" />
<category android:name="$PACKAGE$" />
</intent-filter>)
  • بجای $PACKAGE$ پکیج نیم خود را قرار دهید.

  • در اندروید 8 ممکن است نوتیفیکیشنی ایجاد شود و ثابت روی استاتوس بار کاربر بماند. این به این دلیل است که b4a برای جلوگیری از بسته شدن سرویس جیسون آن را با نوتیفیکیشن زنده نگه میدارد. برای جلوگیری از نمایش نوتیفیکیشن بایستی کد زیر را در Service_start جیسون رسیور قرار دهید:

Service.StopAutomaticForeground

از این طریق JSON دریاقت می شود و با قرار دادن کد خود به جای your code در ماژول PusheJsonService.bas می توانید از اطلاعات دریافت شده استفاده کنید.

فرض کنید جیسونی به صورت مقابل فرستاده اید:

{
    "titr": "تیتر",
    "matn": "متن"
}

برای نمایش این جیسون بصورت toast ، در ماژول جیسونی که از سایت پوشه دریافت کرده اید، کد زیر را بنویسید (ساب MessageArrived را جایگزین تابعی که در ماژول دریافتی هست کنید) :

Sub MessageArrived (pIntent As Intent)
    Dim JsonMsg As String

    JsonMsg = PusheUtil.getPusheJsonMsg(pIntent)
    If JsonMsg <> "" Then
      'add your code here to deal with JsonMsg
          Log("Json message received: " & JsonMsg)
           processJson(JsonMsg)

    End If
End Sub

Sub processJson(jsonStr As String)
    Dim json1 As JSONParser
    Dim data As Map
    Dim s1 As String
    Dim s2 As String

      json1.Initialize(jsonStr)
      Try
          data = json1.NextObject
        s1 = data.Get("titr")
        s2 = data.Get("matn")
        ToastMessageShow(s1 & ":" & s2 , True)
  Catch
    Log(LastException)

  End Try
End Sub

تاپیک (topic)

شما می توانید کاربران خود را در تاپیک یا کانال های متفاوت ثبت نام کنید و برحسب علاقمندی کاربران یا دسته بندی خودتان به تاپیک مرتبط پوش بفرستید. مثلا اگر شما اپلیکیشن خبری دارید و کاربرانی به اخبار ورزشی علاقمند هستند و عده ای به اخبار فرهنگی، می توانید دسته اول را در تاپیک ورزشی و دسته دوم را درتاپیک فرهنگی ثبت نام کنید و هنگام ارسال پوش، برحسب محتوای پوشتان به تاپیک مرتبط آن را ارسال کنید تا فقط کاربران علاقمند به آن موضوع آن را دریافت کنند.

برای استفاده از این امکان باید کاربران خود را در تاپیک مورد نظر عضو کنید. فرض کنید نام تاپیک مورد نظرتان varzeshi باشد. برای عضویت در این تاپیک از دستور زیر استفاده کنید:

pushe.subscribe("varzeshi")

برای لغو عضویت از این تاپیک از دستور زیر استفاده کنید:

pushe.unsubscribe("varzeshi")

نکته: توجه داشته باشید که توابع مربوط به عضو شدن و لغو عضویت در تاپیک باید بعد از پایان Pushe.initialize اجرا شوند. بنابراین آنها را بلافاصله بعد از Pushe.initialize قرار ندهید.

غیرفعال کردن نمایش پوش

می توانید نمایش پوش را غیرفعال کنید. مثلا در تنظیمات اپلیکیشن خود امکان دریافت نکردن پوش را برای کاربر قرار دهید و طبق انتخاب کاربر آن را فعال یا غیرفعال کنید.

برای غیرفعال کردن نمایش پوش از دستور زیر استفاده کنید:

pushe.notificationOff()

برای فعال سازی دوباره ی نمایش پوش از دستور زیر استفاده کنید:

pushe.notificationOn()

ارسال پوش از یک دستگاه به دستگاه دیگر

می توانید مستقیم از یک دستگاه به دستگاه دیگر اعلان بفرستید. برای این کار باید شناسه ی پوشه ی آن دستگاه یعنی pusheId آن را داشته باشید. برای بدست آوردن شناسه هر دستگاه می توانید به روش زیر عمل کنید:

Dim p as Pushe
String pid = p.getPusheId()

به این روش pid هر دستگاه را می توانید بدست بیاورید و آنها را در سرور خود ذخیره کنید تا برای ارسال اعلان به دستگاه از آن استفاده کنید. برای ارسال اعلان ساده از دستور زیر استفاده کنید:

p.sendSimpleNotifToUser("pid_a0e3-82ac-a0", "title", "content")

پارامتر اول pusheId است و پارامتر دوم و سوم به ترتیب تیتر و متن اعلان هستند. برای ارسال اعلان پیشرفته از این دستور استفاده کنید:

p.sendAdvancedNotifToUser("pid_a0e3-82ac-a0", "{ \"title\":\"تست\", \"content\":\"پیام ارسالی از یک دستگاه \" }")

پارامتر اول pusheId است و پارامتر دوم یک رشته با فرمت جیسون است که مشخصات اعلان پیشرفته را تعیین می کند. برای دیدن فرمت جیسون اعلان پیشرفته به قسمت راهنمای استفاده از API قسمت ارسال اعلان پیشرفته مراجعه کنید. برای ارسال جیسون دلخواه از دستور زیر استفاده کنید:

p.sendCustomJsonToUser("pid_a0e3-82ac-a0", "{ \"key1\":\"value1\", \"key2\":\"value2\" }")

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

نکته مهم: توابع ارسال اعلان به دستگاه دیگر و عضویت یا لغو عضویت در تاپیک را بعد از اطمینان از اینکه عملیات initialization پوشه انجام شده است، صدا بزنید. برای این کار به روش زیر عمل کنید:

If p.pusheInitialized() Then
    p.sendSimpleNotifToUser("pid_a0e3-82ac-a0", "title", "content")
End If

ایجاد و حذف کانال نوتیفیکیشن در اپلیکیشن (Android 8.0+ only)

در اندروید ۸ به بعد قابلیتی برای تعریف کانال نوتیفیکیشن در اپلیکیشن ایجاد شده است. به این شکل که در برنامه خود یک یا چند کانال نوتیفیکیشن تعریف می کنید و در زمان ارسال اعلان پیشرفته با وارد کردن Channel-Id آن کانال می توانید اعلان را برای آن کانال خاص ارسال کنید. مزیت این کار این هست که کاربر می تواند دریافت نوتیفیکیشن از بعضی کانال ها را غیرفعال کند و همچنان بتواند از یک یا چند کانال دیگر اعلان بگیرد. فراخوانی تابع ایجاد یا حذف کانال در حالتی که برنامه شما روی اندروید زیر ۸ اجرا شود، اثری ندارد. همچنین اگر بیشتر از یکبار تابع ایجاد کانال را صدا بزنید هم فقط یکبار کانال ایجاد می شود و مشکلی ایجاد نمی کند. با استفاده از دستور زیر در برنامه خود می توانید کانال نوتیفیکشن تعریف کنید:

    Dim p As Pushe
    p.createNotificationChannel(
                "MY_CHANNEL_ID", 'channelId
                "all news channel", 'Channel Name
                "", 'description about channel
                4, 'importance: Number between 0 to 5 (5 is the most important)
                true, 'enableLight
                true, 'enableViberation
                true, 'showBadge
                -16776961, 'led color
                new long[]{100, 200, 300, 400, 500, 400, 300, 200, 400} 'Vibrate mode (can be null)
    )

با استفاده از تابع زیر در برنامه خود می توانید کانال نوتیفیکیشنی که قبلا ایجاد کردید را حذف کنید:

     Dim p As Pushe
     p.removeNotificationChannel(
                "MY_CHANNEL_ID" 'channelId 
    )

عیب یابی

شما می توانید خطاهای عمومی موجود در هنگام نصب در اندروید را در این لینک مشاهده نمایید. موارد عنوان شده در زیر تنها مربوط به بیسیک 4اندروید هستند.


Generate R . Error

این خطا دلایل مختلفی دارد که معمولا در پایین آن درج شده است. در صورتی که هیچ خطایی بعد از آن نیست معمولا ناسازگاری android.jar و یا نسخه ی استفاده شده در B4A است.


NoClassDefFoundError: co.ronash.pushe.b4awrapper.PusheWrapper

کتابخانه android support v4.jar که شما استفاده می کنید با کتابخانه پوشه ناسازگار است. برای رفع این مشکل این فایل دانلود کنید و در فولدر additional libraries خودتون قرار دهید.


Install_parse_failed_manifest_malformed

این مشکل به دلیل این است که شما در Package Name اپلیکیشن خود از حروف بزرگ انگلیسی استفاده کرده اید. و اگر در منیفست شما از پکیج نیم استفاده شده باشد، بیسیک 4 اندروید نمی تواند کامپایل کند. برای آشنایی بیشتر می توانید به این سایت مراجعه کنید.


messagereceived_service_create (java line: 146) java.lang.OutOfMemoryError:

این مشکل به دلیل کم آوردن رم برای کامپایل کردن است. برای کامپایل برنامه خود نیاز دارید تا 1 گیگ رم خالی به هنگام کامپایل داشته باشید. در ضمن ممکن است مقدار تخصیص داده شده رم به بیسیک شما کم باشد که میتوانید اون رو از طریق زیر افزایش بدید: به ادرس زیر در کامپیوتر خودتون برید C:\Users\User\AppData\Roaming\Anywhere Software\Basic4android فایل b4xV5.ini رو باز کنید و مقدار MaxRamForDex=1024 رو با توجه به رم خودتون بالاتر از 1024 قرار بدید.


تداخل گوگل-پلی-سرویس با کتابخانه پوشه

این خطا در حالتی رخ میدهد که کتابخانه ی google-play-services.jar در پروژه استفاده شده باشد. در این حالت ممکن است به دلیل تکراری شدن برخی کتابخانه خطارخ دهد. در این صورت کارهای زیر را انجام دهید:

  • از Libraries فایل های PushePlugin-v1.4.1.jar و PushePlugin-v1.4.1.xml را پاک کنید و این فایل ها ها را قرار دهید.
  • این فایل را دانلود کنید و از داخل پوشه ی lib آن، فایل google-play-services.jar را کپی کنید و آن را با فایلی که خود دارید جایگزین کنید.
  • فایلی که در بالا دانلود کردید داخلش پوشه ی res وجود دارد. این پوشه را در ریسورس های پروژه و داخل MainActivity (همان اکتیویتی که پوشه را initialize می کنید) آدرس دهی کنید.
  • در داخل منیفست پروژه تان که قبلا منیفست پوشه را اضافه کرده اید بروید. در انتهای آن و در جایی که تگ های meta-data وجود دارد، تگ زیر هم باید باشد:
     <meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version"/>

اگر احیانا آن را حذف کرده اید، مجددا آن را اضافه کنید. یعنی قسمت پایانی منیفست شما که از پنل پوشه در برنامه تان کپی کرده اید باید به شکل زیر باشد:

    <meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version"/>

    <meta-data android:name="co.ronash.pushe.token" android:value="-----"/>
    <meta-data android:name="co.ronash.pushe.cr" android:value="-----"/>

که token و cr مقادیر درست خودشان را طبق چیزی که شما از پنل دریافت کرده اید دارند.

همیشه در کنارتان هستیم

در اولین فرصت با ایمیل به شما پاسخ خواهیم داد.

شاید جواب سوال شما اینجا باشد: سوالات متداول ، مستندات
وارد کردن تمامی فیلد ها الزامی است.
پیام شما با موفقیت ارسال شد