PDA

View Full Version : راهنمایی برای معرفی برخی توابع Flurry



slr560
جمعه 03 بهمن 1393, 13:14 عصر
سلام دوستان
من توی استفاده از برخی توابع Flurry دچار مشکل شدم
اینکه دقیقا کجا باید استفاده بشن و چه کاربردی دارن . توی داکیومنت خود Flurry پیشنهاداتی واسه API 10 داده که باید به کار برد
لیست برخی از توابع که نمیدونم دقیق کجا باید گزاشت و دقیقا چه کاربردی دارن رو پایین مینویسم
هر کی از دوستان اگه یکی دوتاشم یه توضیح بده که کجا باید نوشته بشه و چه کاری انجام میده ممنون میشم. اینم بگم که داکیومنت رو خوندم و فقط دقیق تر میخوام بدونم


FlurryAgent.init();
FlurryAgent.onStartSession();
FlurryAgent.onEndSession();
FlurryAgent.addOrigin();
FlurryAgent.endTimedEvent();
FlurryAgent.getAgentVersion();
FlurryAgent.getReleaseVersion();
FlurryAgent.clearLocation();
FlurryAgent.logEvent();
FlurryAgent.setLogLevel();
FlurryAgent.setContinueSessionMillis();
FlurryAgent.setCaptureUncaughtExceptions();
FlurryAgent.setLogEnabled();
FlurryAgent.setLocationCriteria();
FlurryAgent.setUserId();
FlurryAgent.onError();

slr560
جمعه 03 بهمن 1393, 14:13 عصر
یه سوال دیگم اینه که API KEY رو باید کجا نگهداری کنیم؟
من اومدم یه استرینگ public تعریف کردم تا بتونم توی همه کلاسا ازش استفاده کنم . این کار مشکلی نداره که؟؟؟
کلا واسه امنیت API KEY باید کار خاصی انجام داد؟؟

Nevercom
جمعه 03 بهمن 1393, 15:08 عصر
onStartSession رو بهتره در متد OnStart مربوط صدا بزنید و در متد onStop هم متد onEndSession. اول onStartSession رو صدا بزنید و بعد متد logEvent برای ثبت یک event. (متد onStartSession در ابتدا و onEndSession در انتهای چرخه ی حیات اکتیویتی صدا زده میشن)

FlurryAgent.getAgentVersion()
;FlurryAgent.getReleaseVersion();


اینها برای بدست آوردن نسخه ی SDK هستن و کاربردی در وظیفه ی اصلی Flurry ندارن.

FlurryAgent.setCaptureUncaughtExceptions();

Flurry قابلیت گزارش خطا ها یا درواقع Crash ها رو داره، این متد که فکر می کنم پارامتری از جنس boolean میگیره، این قابلیت رو فعال یا غیرفعال می کنه.

FlurryAgent.setLogLevel();
FlurryAgent.setLogEnabled();

مطمئن نیستم، اما گمان میکنم این متدها برای فعال سازی قابلیت Log درونی SDK هست، یعنی اگر فعال باشه، Flurry کارایی که داره می کنه رو تو LogCat نمایش میده، بیشتر واسه وقتیه که اگر درست کار نکرد بررسیش کنی.

FlurryAgent.setUserId();
با این متد یک userId به کاربر اختصاص میدی، کاربردش اینه که اگر تو برنامه ت واقعاً برای هر یوزر، یک یوزر آیدی داری، کمک می کنه تا بشه در پنلش تشخیص داد که این گزارش خطا یا این event مال کدوم کاربره
ضروری هم نیست که ست بشه


FlurryAgent.setLocationCriteria();
Flurry این قابلیت رو داره که اطلاعات مکانی کاربر رو بگیره و درنهایت به شما بگه چند درصد از کاربران شما مال این کشور و اون شهر و... هستن. واسه ایران فقط تا سطح کشور رو نشون میده و نه شهرها، که بی فایده ش می کنه تقریباً (قبلنا اینطور بود، شاید الان تغییر کرده باشه).
گمان می کنم این متد برای اینه که اطلاعات مکانی این کاربر رو بدی به Flurry تا ثبت کنه.

FlurryAgent.logEvent();
FlurryAgent.endTimedEvent();

logEvent که اصلی ترین متد هست و همونطور که از اسمش پیداست رویداد ها رو ثبت می کنه که تو پنل براتون نمایش داده میشه.
فکر کنم چند نسخه از این متد با Signature های متفاوت وجود داشته باشه، پارامتر اول همیشه اسم event هست.
تو یکی از نسخه های این متد، میتونی ست کنی که این رویداد رو میخوام زمان شروع و پایانش رو log کنم، مثلاً رویداد مربوط به دانلود از اینترنت هست و میخوای چک کنی چقدر طول کشیده، قبل از شروع رویداد رو ثبت می کنی و وقتی تموم شد، متد endTimedEvent رو صدا میزنی تا بگی اون رویداد الان کارش تموم شد، پارامتر اول هردوی این پارامترها نام event هست که باید مثل هم باشه تا بتونه تشخیص بده کدوم رویداد الان تموم شد.

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

slr560
جمعه 03 بهمن 1393, 15:22 عصر
حتما باید ابتدای کار init کرد؟ این متد دقیقا کجا باید باشه؟
سوال اینجاس که برای هر اکتویتی یا فرگمنت باید این init یا onStart نوشته بشه؟

Nevercom
جمعه 03 بهمن 1393, 15:29 عصر
متد inint رو بخاطر ندارم که استفاده هم کرده باشم، نمیدونم. مستندات رو بخونید. ولی اطمینان دارم که init اگر هم نیاز باشه، فقط یکباره (مثلاً در کلاس Application).

متدهای onStartSession و onEndSession باید در هر اکتیویتی نوشته بشه (در onStart و onStop که بهترین محل برای این متدها هستن)

slr560
جمعه 03 بهمن 1393, 16:01 عصر
ممنون به خاطر توضیحات . من از ورژن 5.1 استفاده میکنم
توی داکیومنت اینجور نوشته برای init


Step 3. Add calls to init, onStartSession and onEndSession
1. If you are shipping an app, Insert a call to FlurryAgent.init(Context, String) in your MyApplication
class, passing it a reference to your Application Context and your project's API key:


public class MyApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
// configure Flurry
FlurryAgent.setLogEnabled(false);
// init Flurry
FlurryAgent.init(this, MY_FLURRY_APIKEY);
}
}


Alternatively, you may call init() just before onStartSession(). It is safe to call init() more than once,
provided that you use the same API key throughout the application. You may use any type of
Context you wish.

اکتیویتی اصلی من از ActionBarActivity ارث بری میکنه . به نظر شما اشکال داره توی متد onCreate بیام init کنم؟؟؟
اصن چرا گفته باید از Application ارث بری کنه؟

یه مسئله دیگه هم اینکه این ورژن از API 10 به بالا پشتیبانی میکنه . راه حلی برای API 8 نیست؟

hamedjj
جمعه 03 بهمن 1393, 16:55 عصر
اگر تونستید خواهشا یک آموزش درباره پیاده سازی تبلیغات flurry بگذارید.
نمیدونم چرا هر کاری باهاش میکنم هی کرش میکنه.

معروفترین برنامه ها از این سرویس ad network استفاده میکنند که یه جورایی بهترینه
CPC , CPM هستش و طی ایمیلی که بهشون دادم از visa و master Card هم پشتیبانی میکنند که خیلی عالیه

تشکر فراوان

Nevercom
جمعه 03 بهمن 1393, 19:30 عصر
خب من چون از نسخه ی قدیمی تر استفاده کرده بودم اون متد وجود نداشت.
بر طبق مستندات که نقل قول کردید، تو کلاس اپلیکیشن متد init رو صدا می زنید، البته مانعی نداره که به دفعات صدا زده بشه (به شرطی که API KEY ثابت بمونه)

دلیل اینکه گفته میشه در کلاس Application این متدها صدا زده بشه، عموماً بخاطر این هست که این SDK ها از معماری Singleton استفاده می کنن، و برای انجام خیلی از کارها به Context احتیاج دارن، پس Context رو از شما میگیرن و ذخیره می کنن، متدهای بعدی میتونن کارشون رو درست انجام بدن بخاطر اینکه متد init صدا زده شده و Context مورد نیاز رو دریافت کرده. حالا به این دلیل کلاس Application بهترین مکان هست که ۱) ابتدایی ترین محل ورود به اپلیکیشن هست ۲) طول عمرش به اندازه ی طول عمر پروسه ی برنامه هست، که باعث میشه Context دریافت شده تا انتهای اجرای برنامه معتبر باشه.

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

slr560
شنبه 11 بهمن 1393, 00:47 صبح
یه سوال دیگه برام پیش اومد
فرض کنید من میخوام یه آمار از مدل گوشی ها و ورژن اندروید هر گوشی بگیرم
چجوری باید این کارو بکنم؟ میشه یه نمونه مثال بزنید؟؟ یعنی میخوام بدونم از کدوم تابع flurry استفاده کنم؟؟؟ و کجا؟؟

Nevercom
شنبه 11 بهمن 1393, 03:28 صبح
کار اضافه تری نیاز نیست انجام بشه.

با همون توابعی که استفاده کردید، Flurry اطلاعات زیادی رو در اختیارتون میزاره.
وارد پنل برنامه تون بشید، از بخش Technical گزینه ی All Devices رو انتخاب کنید تا لیست دستگاه ها رو ببینید که بر اساس تعداد درخواست مرتب شدن.
در همین بخش می تونید لیست تفکیک شده بر اساس Firmware version که همون ورژن اندروید هست رو مشاهده کنید.