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"/>

Unity

Gradle based

برای استفاده باید نسخه ی یونیتی شما حداقل 5.5.0 باشد.
در این بخش بایستی از BuildSystem ی که از نسخه ی 5.5.0 به یونیتی اضافه شده به نام Gradle استفاده کنید.

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

  • در حال حاضر این کتابخانه فقط برای بازی های اندرویدی کار میکند.

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

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

AndroidManifest.xml:

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

این فایل همان مانیفست شماست که از پنل دریافت میکنید. در فایل سه مقدار باید قرار داده شود. نام پکیجی شما که در پنل ثبت کردید که محل آن بخش هایی است که با <YOUR_PACKAGE> مشخص شده اند. توکن پوشه که از پنل دریافت میکنید. محل آن در بخش هایی ست که با <YOUT_PUSHE_TOKEN> مشخص شده اند؛ و همچنین Pushe CR که در مانیفست با <YOUR_PUSHE_CR> مشخص شده اند. کافیست مقادیر مشخص شده را جایگذاری کنید کرده و save کنید.

mainTemplate.gradle: این فایل همان build.gradle است که در پروژه های اندرویدی که از سیستم گریدل استفاده میکنند. در فایل بلاکی مشاهده میشود که بصورت زیر است:

dependencies {
    if (GradleVersion.current() >= GradleVersion.version("4.2")) {
        implementation fileTree(dir: 'libs', include: ['*.jar'])
        implementation 'co.ronash.android:pushe-base:1.4.1' // PUSHE RELATED
    } else {
        compile fileTree(dir: 'libs', include: ['*.jar'])
        compile 'co.ronash.android:pushe-base:1.4.1' // PUSHE RELATED
    }

    **DEPS**
}

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

تنظیمات پروژه

این دو فایل را در پوشه ی Assets -> Plugins -> Android قرار دهید. در صورتی که این پوشه ها موجود نیستند آنها را بسازید. برای اضافه شدن فایل های لازم باید گریدل اقدام به گرفتن فایل ها از سرور های مشخص شده در mainTemplate.gradle کند. برای اینکار: به منوی File -> Build settings (Ctrl+Shift+B) بروید و از پلتفرم ها اندروید را انتخاب کرده و Switch platform را بزنید. مقدار گزینه ی Build System را به Gradle یا Gradle (New) تغییر دهید. سپس Build را بزنید.

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

پس از بیلد موفق حال در فولدر Assets یا فر فولدر دیگر یک اسکریپت سی شارپ بسازید. (Right click -> Create -> C# script) سپس آن را به Main Camera اضافه کنید. برای اینکار آن را به Main Camera drag and drop کنید. سپس آن را باز کرده و کد های لازم را به تابع Start اضافه کنید.

try
{
    AndroidJavaClass activityClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
    //getting context of unity activity
    AndroidJavaObject activityContext = activityClass.GetStatic<AndroidJavaObject>("currentActivity");
    //if this is true, user will see a dialog for installing GooglePlayService if it is not installed on her/his device
    bool showGooglePlayDialog = true;
    //calling plugin class by package name
    AndroidJavaClass pluginClass = new AndroidJavaClass("co.ronash.pushe.Pushe");
    if (pluginClass != null)
    {
        activityContext.Call("runOnUiThread", new AndroidJavaRunnable(() =>
        {
            //calling initialize static method
            pluginClass.CallStatic("initialize", new object[2] { activityContext,     showGooglePlayDialog });
            //sample usage of Subscribe and other methods: use subscribe and sentNotifToUser after a chack on 'PusheIsInitialized()'
            if(PusheIsInitialized()){
                // Use features to invoke a function ...
            } else {
                // Pushe is not initialized yet.
            }}) );
    }
}
catch
{
    // Catch the Exception if something Happened
}

امکانات

تاپیک (topic)

برای subscribe کردن کاربر در یک کانال خاص از تابع زیر میتوانید استفاده کنید.

/**
 * Call for subscribing to a topic. It has to be called after Pushe.initialize() has completed its work
 * So, call it with a reasonable delay (30 sec to 2 min) after Pushe.initialize()
 **/
public static void Subscribe(string topic){
    AndroidJavaClass activityClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
    AndroidJavaObject context = activityClass.GetStatic<AndroidJavaObject>("currentActivity");
    AndroidJavaClass pluginClass = new AndroidJavaClass("co.ronash.pushe.Pushe");
    if (pluginClass != null) {
        pluginClass.CallStatic("subscribe", new object[2] {context, topic});
    }
}
  • مثال:
Subscribe("Varzeshi");

و برای unsubscribe کردن کاربر نیز میتوانید تایع زیر را فراخوانی کنید.

  • مثال:
    Unsubscribe("Varzeshi");
/**
 * Call for unsubscribing from a topic. It has to be called after Pushe.initialize() has completed its work
 * So, call it with a reasonable delay (30 sec to 2 min) after Pushe.initialize()
 **/
public static void Unsubscribe(string topic){
    AndroidJavaClass activityClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
    AndroidJavaObject context = activityClass.GetStatic<AndroidJavaObject>("currentActivity");
    AndroidJavaClass pluginClass = new AndroidJavaClass("co.ronash.pushe.Pushe");
    if (pluginClass != null) {
        pluginClass.CallStatic("unsubscribe", new object[2] {context, topic});
    }
}

دریافت جیسون

در حال حاضر این امکان برای پلتفرم یونیتی موجود نیست.

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

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

  • مثال:
    NotificationOff();
/**
 * Call this method to disable publishing notification to user.
 * To enable showing notifications again, you need to call SetNotificationOn()
 **/
public static void NotificationOff(){
    AndroidJavaClass activityClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
    AndroidJavaObject context = activityClass.GetStatic<AndroidJavaObject>("currentActivity");
    AndroidJavaClass pluginClass = new AndroidJavaClass("co.ronash.pushe.Pushe");
    if (pluginClass != null) {
        pluginClass.CallStatic("setNotificationOff", new object[1] {context});
    }
}

برای فعال کردن نوتیفیکیشن (در صورتی که قبلا آنرا غیرفعال کردید) میتوانید از این تابع استفاده کنید.

  • مثال:
    NotificationOn();
/**
 * Call this method to enable publishing notification to user, if you already called SetNotificationOff()
 **/
public static void NotificationOn(){
    AndroidJavaClass activityClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
    AndroidJavaObject context = activityClass.GetStatic<AndroidJavaObject>("currentActivity");
    AndroidJavaClass pluginClass = new AndroidJavaClass("co.ronash.pushe.Pushe");
    if (pluginClass != null) {
        pluginClass.CallStatic("setNotificationOn", new object[1] {context});
    }
}

برای بررسی کردن اینکه پوشه initialize شده است یا نه میتوانید از این تابع استفاده کنید. خروجی تابع True/False است.

  • مثال:
    bool isPusheInitialized = PusheIsInitialized();
/**
 * Call this method to check if pushe is initialized.
 * It is needed before call to un/subscribe, and sendNotif to user methods
 **/
public static bool PusheIsInitialized(){
    AndroidJavaClass activityClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
    AndroidJavaObject context = activityClass.GetStatic<AndroidJavaObject>("currentActivity");
    AndroidJavaClass pluginClass = new AndroidJavaClass("co.ronash.pushe.Pushe");
    if (pluginClass != null) {
        return pluginClass.CallStatic<bool>("isPusheInitialized", new object[1] {context});
    }
    return false;
}

برای گرفتن پوشه آی دی تابع زیر را فراخوانی کنید:

  • مثال:
    string myPusheId = GetPusheId();
/**
 * Call this method to get this device pusheId.
 * It is needed for call to and sendNotif to user methods
 **/
public static string GetPusheId(){
    AndroidJavaClass activityClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
    AndroidJavaObject context = activityClass.GetStatic<AndroidJavaObject>("currentActivity");
    AndroidJavaClass pluginClass = new AndroidJavaClass("co.ronash.pushe.Pushe");
    if (pluginClass != null) {
        return pluginClass.CallStatic<string>("getPusheId", new object[1] {context});
    }
    return "";
}

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

ارسال اعلان ساده به کاربر خاص در برنامه:

  • مثال:
    // You can pass anything as PushId. Here is the user's device
    SendSimpleNotifToUser(GetPusheId(), "Simple Title", "Simple Content");
/**
 * Call this method to send simple notification from client to another client.
 **/
public static void SendSimpleNotifToUser(string userPusheId, string title, string content){
    AndroidJavaClass activityClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
    AndroidJavaObject context = activityClass.GetStatic<AndroidJavaObject>("currentActivity");
    AndroidJavaClass pluginClass = new AndroidJavaClass("co.ronash.pushe.Pushe");
    if (pluginClass != null) {
        pluginClass.CallStatic("sendSimpleNotifToUser", new object[4] {context, userPusheId, title, content});
    }
}

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

  • مثال:
    // You can pass anything as PushId. Here is the user's device
    SendSimpleNotifToUser(GetPusheId(), "{ \"title\":\"تست\", \"content\":\"پیام ارسالی از یک دستگاه \"");
/**
 * Call this method to send advanced notification from client to another client.
 * You need to prepare advanced notification as a valid json string.
 **/
public static void SendAdvancedNotifToUser(string userPusheId, string notificationJson){
    AndroidJavaClass activityClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
    AndroidJavaObject context = activityClass.GetStatic<AndroidJavaObject>("currentActivity");
    AndroidJavaClass pluginClass = new AndroidJavaClass("co.ronash.pushe.Pushe");
    if (pluginClass != null) {
        pluginClass.CallStatic("sendAdvancedNotifToUser", new object[3] {context, userPusheId, notificationJson});
    }
}

ارسال جیسون به کاربر خاص در برنامه:

  • مثال:
    SendCustomJsonToUser(GetPusheId(), "{\"key\":\"value\"}"); // might throw JSONException if invalid jsonObject entered.
/**
 * Call this method to send any content you like to another client.
 * You need to prepare this content as a valid json string.
 **/
public static void SendCustomJsonToUser(string userPusheId, string customJson){
    AndroidJavaClass activityClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
    AndroidJavaObject context = activityClass.GetStatic<AndroidJavaObject>("currentActivity");
    AndroidJavaClass pluginClass = new AndroidJavaClass("co.ronash.pushe.Pushe");
    if (pluginClass != null) {
        pluginClass.CallStatic("sendCustomJsonToUser", new object[3] {context, userPusheId, customJson});
    }
}

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

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

    Pushe.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 Nullable)
    );

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

    Pushe.RemoveNotificationChannel(
                "MY_CHANNEL_ID" //channelId
    );

توابع بصورت زیر هستند:

/**
 * Create a custom notification channel. This methos works for android 8+
 * On lower android version, call to this method has no effect
 **/
public static void CreateNotificationChannel(string channelId, string channelName,
    string description, int importance,
    bool enableLight, bool enableVibration,
    bool showBadge, int ledColor, long[] vibrationPattern){

    AndroidJavaClass activityClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
    AndroidJavaObject context = activityClass.GetStatic<AndroidJavaObject>("currentActivity");
    AndroidJavaClass pluginClass = new AndroidJavaClass("co.ronash.pushe.Pushe");
    if (pluginClass != null) {
        pluginClass.CallStatic("createNotificationChannel", 
            new object[10] {context, channelId, channelName, description, importance, enableLight, 
                enableVibration, showBadge, ledColor, vibrationPattern});
    }
}
/**
 * Remove a custom notification channel. This methos works for android 8+
 * On lower android version, call to this method has no effect
 **/
public static void RemoveNotificationChannel(string channelId){
    AndroidJavaClass activityClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
    AndroidJavaObject context = activityClass.GetStatic<AndroidJavaObject>("currentActivity");
    AndroidJavaClass pluginClass = new AndroidJavaClass("co.ronash.pushe.Pushe");
    if (pluginClass != null) {
        pluginClass.CallStatic("removeNotificationChannel", 
            new object[2] {context, channelId});
    }
}

بهتر است تمام توابعی که نیاز به Initialize شدن پوشه را دارند پس از بررسی شرط PusheIsInitialized فراخوانی کنید.

if (PusheIsInitialized()) { 
    // For example
    Subscribe("Some_topic");
}

Package importing

  • در این روش شما پکیج آماده شده را دانلود نموده و نصب میکنید.
    برای استفاده باید نسخه ی یونیتی شما حداقل 5.4.0 باشد.

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

کتابخانه پوشه برای Unity را از این لینک دانلود کنید. در پروژه یونیتی خود بر روی فولدر Assets کلیک راست کنید و از Import Package بر روی Custom Package کلیک کنید و فایل پکیج دانلود شده بالا را انتخاب کنید. از مسیر Assets/Source پریفب PusheGameObject را درگ کرده و در پنجره ی Hierarchy رها کنید.

تنظیمات پروژه

از منوی File گزینه ی Build Setting را فشار دهید. در بین پلتفرم ها Android را انتخاب کنید و دکمه ی Player Setting را بزنید. در قسمت Bundle Identifier از همین پنجره، پکیج نیم اپلیکیشن خود را وارد کنید.

تغییرات AndroidManifest.xml

وارد پنل پوشه شوید و اپلیکیشن خود را ثبت کنید. توجه داشته باشید که از همان Package Name استفاده کنید که در مرحله قبل به عنوان Bundle Identifier وارد کرده اید. فایل منیفست مربوط به Unity را دانلود کنید و محتوای آن را در منیفست خود در مسیر Assets/Plugins/Android ادغام نمایید. اگر فایلAndroidManifest.xml در این مسیر موجود نیست، ابتدا این فایل را از مسیر C:\Program Files\Unity\Editor\Data\PlaybackEngines\androidplayer\apk کپی کرده و در مسیر Assets/Plugins/Android از پروژه خود paste کنید. در داخل تگ manifest و زیر xmlns:android="http://schemas.android.com/apk/res/android" این تگ را اضافه کنید: xmlns:tools="http://schemas.android.com/tools" . برخی از دسترسی ها (permissions) برای پوشه اختیاری است. این دسترسی ها برای ارسال هدفمند اعلان به کاربران است. شما قادر خواهید بود با استفاده از این دسترسی ها کاربران خود را دسته بندی کنید و اعلانهای خود را هدفمند ارسال کنید.

تست

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

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

توصیه می شود اپلیکیشن را بر روی موبایل یا تبلت اجرا و تست کنید. اگر می خواهید اپلیکیشن را بر روی Emulator تست کنید، بر روی ایمولاتور شما باید Google API نصب باشد.

امکانات

تاپیک (topic)

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

برای استفاده از این امکان باید کاربران خود را در تاپیک مورد نظر عضو کنید. فرض کنید نام تاپیک مورد نظرتان varzeshi باشد. برای عضویت در تاپیک، فایل Pushe.cs را در مسیر Assets/Source باز کرده و تابع Subscribe را با ورودی "varzeshi" روی event مورد نظر خودتان (مثلا در دکمه ای در منوی تنظیمات) صدا بزنید.

برای لغو عضویت از این تاپیک تابع Unsubscribe را با ورودی "varzeshi" روی event مورد نظر خودتان صدا بزنید.

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

دریافت جیسون

در حال حاضر این امکان برای پلتفرم یونیتی موجود نیست.

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

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

برای غیرفعال کردن نمایش پوش باید از تابع SetNotificationOff استفاده کنید. این تابع در کلاس Pushe.cs در مسیر Assets/Source قرار دارد.

برای فعال سازی دوباره ی نمایش پوش از تابع SetNotificationOn در کلاس Pushe.cs استفاده کنید. فراخوانی این توابع را در event موردنظر خود (مثلا در کلیک دکمه ای در منوی تنظیمات) قرار دهید.

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

نکته مهم: توابع ارسال اعلان به دستگاه دیگر و عضویت یا لغو عضویت در تاپیک را بعد از اطمینان از اینکه عملیات initialization پوشه انجام شده است، صدا بزنید. برای این کار در کلاس Pushe.cs که در قسمت Source پلاگینی پوشه که به پروژه اضافه کرده اید است، کدهای زیر را قرار دهید (یا در محل دیگری که موردنظرتان هست آن را فراخوانی کنید):

    activityContext.Call("runOnUiThread", new AndroidJavaRunnable(() =>
    {
             print("pusheID is " + GetPusheId());
        if(PusheIsInitialized()){
                    Subscribe("unity_test_topic");
                    SendSimpleNotifToUser("pid_ac70-e04e-3a", "device to device msg", "unity d2d msg");
     }));

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

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

    Pushe.CreateNotificationChannel(
                context,
        "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 Nullable)
    );

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

    Pushe.RemoveNotificationChannel(
                context,
                "MY_CHANNEL_ID" //channelId
    );

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

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

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