سوالات

سوال مورد نظر شما در این صفحه مطرح نشده است؟ در قسمت Issues گیت‌هاب جستجو کنید و در صورت نیافتن در آنجا مورد جدیدی مطرح کنید.

مرتبط با نمایش نوتیفیکیشن

آیکن نوتیفیکیشن مربعی سفید و یا خاکستری‌ است

هنگام رسیدن اعلان به دیوایس، کتابخانه‌ی پوشه وجود آیکن در اعلان دریافتی را بررسی می‌کند؛ در صورتی که آیکن (small icon) در پنل ارسال نوتیفیکشن و یا از طریق API تعیین شده باشد، آن را قرار می‌دهد و در غیر اینصورت:

  • در صورتی که Android دستگاه بالای 5.1 باشد ابتدا به دنبال آیکن جایگزینی به نام ic_silhouette می‌گردد.
  • در صورتی که آیکنی با نام ic_silhouette در اپ شما وجود نداشته باشد آیکن برنامه را به عنوان آیکن کوچک نوتیفیکیشن قرار می‌دهد.

دلیل سفید دیده شدن آیکن کوچک نوتیفیکیشن چیست؟

در اندروید 5 به بالا، آیکن کوچک نوتیفیکیشن باید تماما سفید و بدون بک‌گراند باشد. به عبارت دیگر بک‌گراند transparent داشته باشد. در غیر اینصورت آیکن نمایش‌ داده شده حالت درستی نخواهد داشت و سفید یا خاکستری دیده می‌شود.

در صورتی که آیکنی در پنل ارسال نوتیفیکیشن و یا از طریق API مشخص نشده باشد، آیکن جایگزینی با نام (ic_silhouette) در اپ شما وجود نداشته باشد و آیکن برنامه‌ی شما نیز سفید بدون بک‌گراند نباشد که معمولا آیکن برنامه اینطوری نیست، این مورد رخ خواهد داد.

راه‌حل: می‌توانید یکی از موارد زیر را در نظر داشته باشید.

  • هنگام ارسال نوتیفیکیشن همیشه آیکن کوچک تنظیم کنید (small icon).

  • آیکنی برای اعلان به صورت سفید بدون بک‌گراند یا در واقع بک‌گراند transparent طراحی‌ کنید و با نام ‌ic_silhouette در drawable برنامه‌ی خود ذخیره‌ کنید. در صورتی که مشکلی وجود‌ داشته باشد پوشه از این آیکن استفاده می‌کند. سایز آیکنی که برای نوتیفیکیشن استفاده می‌کنید باید به صورت جدول زیر باشد.

MDPIHDPIXHDPIXXHDPIXXXHDPI
24px36px48px72px96px
  • آیکن برنامه‌ی شما سفید بدون بک‌گراند باشد. غالبا این راه‌حل کاربرد چندانی ندارد به خاطر اینکه آیکن برنامه معمولا یک آیکن سفید بدون بک‌گراند نیست و برای نوتیفیکیشن از آیکن متفاوتی استفاده می‌شود.

بازکردن اکتیویتی خاص چگونه کار می‌کند؟

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

منظور از نام کامل، پکیج کامل اکتیویتی که در ابتدای فایل ذکر شده به علاوه نام اکتیویتی می‌باشد:

MainActivity.java:

package com.example.myapp.activities;

نام‌کامل: com.example.myapp.activities.MainActivity

می‌توانید پکیج‌نیم برنامه که در نام کامل وجود دارد را ننویسید و فقط اسم پکیجی که اکتیویتی در آن قرار دارد را قبل از اسم اکتیویتی بنویسید. برای مثال اگر پکیج‌نیم برنامه‌ی شما ‌com.example.myapp باشد و اکتیویتی شما در پکیج activities قرار داشته باشد نام‌های معتبر به صورت زیر هستند:

// App: com.example.myapp
// Activity: com.example.myapp.activities.MainActivity
// Valid names:
com.example.myapp.activities.MainActivity
.activities.MainActivity
activities.MainActivity
// Invalid names:
MainActivity

اعلان دارای عکس یا لینک دریافت نمی‌شود و یا بدون عکس است

در صورتی که دستگاه دریافت کننده دارای android 9 یا بالاتر باشد، ترافیک‌های Http در برنامه انجام نمی‌شود و فقط ریکوئست‌های Https قابل انجام است.

راه‌حل: یکی از راه‌های زیر را انتخاب کنید:

  • همیشه از لینک‌های Https استفاده‌کنید و عکس‌ها نیز از سرور Https باشند.
  • برای تغییر تنظیمات اینکه ریکوئست‌های Http نیز کار کنند، این فیلد را در مانیفست خود قرار دهید:
<application
android:usesCleartextTraffic="true"
... />

سوالات دیگر

من در برنامه از لوکیشن استفاده می‌کنم، اما نمی‌خواهم این اطلاعات از برنامه‌ی من خارج شوند

پوشه برای ارائه‌ی امکاناتی همچون اعلان جغرافیایی (Geofence based notifications)، فیلتر اعلان با موقعیت کاربر و آمار موقعیت کاربران نیاز به مطلع بودن از موقعیت کاربر خواهد داشت و در صورتی که پرمیشن لوکیشن از طرف کاربر به برنامه داده شود، آخرین موقعیت ذخیره‌شده در دستگاه را (Last known location) را گاها به سرور ارسال می‌کند تا برای امکانات ذکر شده بستر لازم فراهم شود.
اما در صورتی که کاربر تمایلی به استفاده از این امکانات نداشته باشد می‌تواند قابلیت ثبت و ارسال اطلاعات لازم برای این امکانات را غیرفعال کند.

برای این کار بایستی در فایل مانیفست یک متادیتا اضافه کنید تا هنگام شروع برنامه به پوشه اطلاع داده شود تا این داده‌ها به هیچ‌وجه جمع‌آوری نشود.

نکته: این مورد تنها در نسخه‌ی نیتیو 2.0.5 امکان‌پذیر است و برای استفاده باید این نسخه‌ و یا بالاتر در برنامه اضافه‌شده باشد.

<application>
...
<meta-data android:name="pushe_extra_data_usage" android:value="false" />
</application>

توجه داشته باشید در صورت قراردادن این کد، قابلیت‌های زیر برای شما به درستی کار نخواهند کرد:

  • اعلان‌های جغرافیایی (Geofence)
  • فیلتر بر اساس موقعیت کاربر
  • آمار موقعیت کاربران