miladk313
5 سال پیش توسط miladk313 مطرح شد
14 پاسخ

کنترل ریکوئست های ارسال شده اپلیکیشن های آندروید

سلام دوستان من میخوام یه اپلیکیشن بنویسم که بتونم همه ی درخواست هایی که از اپلیکیشن های مختلف ارسال میشه رو کنترل کنم و کاربر بتونه اون ریکوئست ها رو ببینه و هر کدومو که نمیخوادو بلاک کنه . راه حلی مدنظرتون هست ؟
@hesammousavi
@ali.bayat
@davoodkhany
@Alimotreb
@juza۶۶
@milad
@endworld
@GHM
@khanzadimahdi
@mehdisut
@mehdisut


ثبت پرسش جدید
مهدی سمیعیان
تخصص : برنامه نویس وب/اندروید
@mahdidev 5 سال پیش مطرح شد
1

@miladk313
در نرم افزار اندروید:
باید برای کنترل اپ های فعال یه سرویس ران کنی که پکیج نیم برنامه ها رو بگیره و در صورت محدودیت مسدود کنه یا درخواست رمز بکنه
برای کنترل http ریکوئست ها هم یه سرویس دیگه میخواد که مثل یه proxy عمل کنه و دیتا از سمت اون به سرور هدایت بشه و در صورت نیاز محدود بشه

سمت سرور هم که مشخصه...


Alimotreb
تخصص : کانفیگ سرور و برنامه نویس
@Alimotreb 5 سال پیش مطرح شد
0

سلام
@miladk313

متوجه سوال نشدم
کلاینت یه درخواست به سمت سرور میده
سرور هم ج میده
هر کلاینت هم میتونه چندین درخواست بده

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


داود خانی
تخصص : برنامه نویس لاراول و متخصص سئو...
@davoodkhany 5 سال پیش آپدیت شد
1

@Alimotreb من که api بلد نیستم هنوز سمتش نرفتم.
شما ج بدید ما هم یه چی یاد بگیریم.


سیدعلی موسوی
تخصص : سی شارپ و پی اچ پی
@juza66 5 سال پیش مطرح شد
0

منظورتون api بنویسین که درخواست های که به url میشه رو مدیریت کنه؟!


Alimotreb
تخصص : کانفیگ سرور و برنامه نویس
@Alimotreb 5 سال پیش آپدیت شد
0

سلام
@miladk313

سلام دوستان من میخوام یه اپلیکیشن ( تحت وب یا گوشی ؟؟؟ )
بنویسم که بتونم همه ی درخواست هایی که از اپلیکیشن های مختلف ( تحت وب یا گوشی موبایل ؟؟؟؟)
ارسال میشه رو کنترل کنم ( دقیقا هدفتون از کنترل کردنش چیه ؟؟؟ چیشو میخواییید مدیریت کنید از درخواست ؟؟؟؟) و کاربر ( ادمین پروژه یا کاربر ؟؟؟ )
بتونه اون ریکوئست ها رو ببینه ( چرا باید ریکوئست دیده بشه اصلا ؟؟؟؟ هر رکوئستی طبق نوع درخواست فقط پاسخ بهش داده میشه ) و هر کدومو که نمیخوادو بلاک کنه ( چیشو بلاک کنه؟ آیا منظورتون اینه درخواست رو که به فرض یه موبایل میفرسته اگه احراز نشد ، ریجکت شه؟؟؟) . راه حلی مدنظرتون هست ؟

لطفا واضح تر بیان کنید سوال رو!


miladk313
تخصص : برنامه نویس لاراول
@miladk313 5 سال پیش مطرح شد
0

میخوام یه نرم افزار کنترل والدین بنویسم ، با دو نوع بسته شدن دسترسی ... یکی اینکه برنامه های انتخابی کاربر که انلاین هستن رو بتونه بلاک کنه که ریکوئست هاش نره کلا ... یکی اینکه کلا اون برنامه رو نزاره اجرا بشه.
برای مثال میخوام والدین بتونه دسترسی فرزندش به اینستا رو ببنده، و اگه حتی فرزندش داخل اینستا هم بود اون لحظه ، ریکوئست های اینستا هم ارسال نشه و عملا نرم افزارهایی که انلاین هستن از کار بیوفتن.
دید کلی ندارم نسبت به پیاده سازی هر دو نوع بسته شدن دسترسی ها... اگه بتونین بهم کمک کنین ممنون میشم.
و چون موضوع سوال رو اندروید انتخاب کردم قاعدتا تحت وب نمیخوام بنویسم @Alimotreb ولی خب سوال شما هم درست و بجاست چون من فکر می کردم وقتی دسته بندی رو انتخاب می کنم داخل سوال نشون داده میشه که انگار اینطوری نیست، ممنون میشم اگه اینو هم لحاظ کنین جناب موسوی. @hesammousavi


miladk313
تخصص : برنامه نویس لاراول
@miladk313 5 سال پیش مطرح شد
داود خانی
تخصص : برنامه نویس لاراول و متخصص سئو...
@davoodkhany 5 سال پیش مطرح شد
0

شرمنده مهندس...


Alimotreb
تخصص : کانفیگ سرور و برنامه نویس
@Alimotreb 5 سال پیش مطرح شد
1

سلام
@miladk313

چیزی که من فهمیدم از سوال شما که میخوایید بنویسید ، یه ماژول یا یه اپ امنیتی و سطح دسترسی هست

شما اپ رو مینویسید
با سطح دسترسی ادمین که خانواده میشه و سطح دسترسی یوزر که کاربر یا بچه هاشون میشن
این برنامه باید طوری باشه که مکانیزمش بر اساس قفل شدن باشه
در حالت عادی برنامه قفل هست برای کاربر
این برنامه باید به یه جایی همچون ناحیه مدیریتی تحت وب وصل باشن
که رکوئست ها پردازش بشن
از اپ خانواده که سطح دسترسی خانواده بهش داده شده ، درخواستی داده میشه که اینستا بسته شه
گوشی کاربر یا بچه اگر به نت وصل باشه و اون سطح دسترسی خودش رو داشته باشه
از سمت وب به گوشی کاربر درخواست بلاک اینستا داده میشه
اپ شما در سمت بچه باید توانایی حذف کردن ، قفل کردن ؛ یا اجازه باز نکردن اپ رو روی گوشی اوکی که!!

مکانیزمتون به این شکل میشه


علی بیات
تخصص : توسعه دهنده ارشد وب
@ali.bayat 5 سال پیش مطرح شد
0

روال کلی کار، میتونه شبیه به زیر باشه:

۱) ابتدا نیاز داری اطلاعات مربوط به دسترسی های هر کاربر رو از جایی (محتمل ترین گزینه یه API هست) دریافت کنی.

۲) بعد باید ترافیک های HTTP رو که از نوع Outgoing هستند رو به شکلی مانیتور کنی... (یعنی اگر کاربر هر درخواست HTTP ارسال میکنه شما از اون مطلع بشی)

۳) اگر درخواست کاربر در لیست دسترسی‌های مجاز دریافتی از API بود که هیچی... در غیر این صورت باید Connection رو از بین ببرید.


مهدی سمیعیان
تخصص : برنامه نویس وب/اندروید
@mahdidev 5 سال پیش مطرح شد
1

@miladk313
در نرم افزار اندروید:
باید برای کنترل اپ های فعال یه سرویس ران کنی که پکیج نیم برنامه ها رو بگیره و در صورت محدودیت مسدود کنه یا درخواست رمز بکنه
برای کنترل http ریکوئست ها هم یه سرویس دیگه میخواد که مثل یه proxy عمل کنه و دیتا از سمت اون به سرور هدایت بشه و در صورت نیاز محدود بشه

سمت سرور هم که مشخصه...


miladk313
تخصص : برنامه نویس لاراول
@miladk313 5 سال پیش مطرح شد
1

@mahdidev
خیلی خیلی ممنون لطف کردین


miladk313
تخصص : برنامه نویس لاراول
@miladk313 5 سال پیش مطرح شد
0

@mahdidev
سلام . من اون قسمت اول رو نوشتم که پکیج نیم همه ی اپ هایی که نصب هستن رو میگیرم و یک دیتابیس sqlite هم ساختم که پکیج نیم اپ هایی که میخوام بلاک بشن رو ذخیره کنه .
دو تا قطعه کد دیدم توی stackoverflow که وقتی پیاده سازیشون می‌‎‍ کنم به مشکل برمیخورم . اگه دوستان اندروید کار لطف کنین راهنمایی کنین ممنون میشم.
https://stackoverflow.com/questions/36261909/how-to-make-app-lock-app-in-android
این قطعه کد که کلا کار نمیکرد برای گرفتن اپ هایی که الان ران هستن بود.

ActivityManager am = (ActivityManager) this.getSystemService(ACTIVITY_SERVICE);
List l = am.getRecentTasks(1, ActivityManager.RECENT_WITH_EXCLUDED);
Iterator i = l.iterator();
PackageManager pm = this.getPackageManager();
while (i.hasNext()) {
ActivityManager.RunningAppProcessInfo info = (ActivityManager.RunningAppProcessInfo)(i.next());
try {
CharSequence c = pm.getApplicationLabel(pm.getApplicationInfo(
info.processName, PackageManager.GET_META_DATA));
Log.w("LABEL", c.toString());
} catch (Exception e) {
// Name Not FOund Exception
    }
   }

این یکی قطعه کد هم تو این قسمتش مشکل دارم که مقدار نمیگیره

UsageStatsManager mUsageStatsManager = (UsageStatsManager) context.getSystemService("usagestats"); 

اون کلاس هم اینه

public class CheckAppLaunchThread extends Thread {

private Context context;
private Handler handler;
private ActivityManager actMan;
private int timer = 100;
public static final String TAG = "App Thread";
public static String lastUnlocked;

// private String lastUnlocked;

public CheckAppLaunchThread(Handler mainHandler, Context context) {
    this.context = context;
    this.handler = mainHandler;
    actMan = (ActivityManager) context
            .getSystemService(Context.ACTIVITY_SERVICE);
    this.setPriority(MAX_PRIORITY);
}

@Override
public void run() {
    context.startService(new Intent(context, AppLockService.class));
    Looper.prepare();
    String prevTasks;
    String recentTasks = "";

    prevTasks = recentTasks;
    Log.d("Thread", "Inside Thread");
    while (true) {
        try {
            String topPackageName = "";
            if(Build.VERSION.SDK_INT >= 21) {
                UsageStatsManager mUsageStatsManager = (UsageStatsManager) context.getSystemService("usagestats");                       
                long time = System.currentTimeMillis(); 
                // We get usage stats for the last 10 seconds
                List<UsageStats> stats = mUsageStatsManager.queryUsageStats(UsageStatsManager.INTERVAL_DAILY, time - 1000*5, time);                                    
                if(stats != null) {
                    SortedMap<Long,UsageStats> mySortedMap = new TreeMap<Long,UsageStats>();
                    for (UsageStats usageStats : stats) {
                        mySortedMap.put(usageStats.getLastTimeUsed(),usageStats);
                    }                    
                    if(mySortedMap != null && !mySortedMap.isEmpty()) {
                        topPackageName =  mySortedMap.get(mySortedMap.lastKey()).getPackageName();                                   
                    }                                       
                }
            }
            else {
                topPackageName = actMan.getRunningAppProcesses().get(0).processName;
            }
            recentTasks = topPackageName;
            Thread.sleep(timer);
            if (recentTasks.length()==0 || recentTasks.equals(
                    prevTasks)) {
            } else {
                if (isAppLocked(recentTasks)) {
                    Log.d(TAG, "Locked " + recentTasks);
                    handler.post(new RequestPassword(context, recentTasks));
                }
            }

        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        prevTasks = recentTasks;

    }

}

class ToastRunnable implements Runnable {

    String message;

    public ToastRunnable(String text) {
        message = text;
    }

    @Override
    public void run() {
        Toast.makeText(context, message, Toast.LENGTH_SHORT).show();

    }
}

class RequestPassword implements Runnable {

    private Context mContext;
    private String pkgName;

    public RequestPassword(Context mContext, String pkgName) {
        this.mContext = mContext;
        this.pkgName = pkgName;
    }

    @Override
    public void run() {

        Intent passwordAct = new Intent(context, PasswordActivity.class);
        passwordAct.putExtra("PACKAGE_NAME", pkgName);
        passwordAct.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK|Intent.FLAG_ACTIVITY_SINGLE_TOP);
        this.mContext.startActivity(passwordAct);

    }

}

private boolean isAppLocked(String packageName) {
    if (packageName.equals(PasswordActivity.lastUnlocked)) {
        return false;
    }
    PasswordActivity.lastUnlocked = null;
    DatabaseHelper dbHelper = new DatabaseHelper(context);
    SQLiteDatabase db = dbHelper.getReadableDatabase();
    Cursor cursor = db.rawQuery("SELECT * FROM locks WHERE package_name=\'"
            + packageName + "\'", null);
    boolean isLocked = false;
    if (cursor.moveToNext()) {
        isLocked = true;
    }

    cursor.close();
    db.close();
    dbHelper.close();
    return isLocked;
}

مهدی سمیعیان
تخصص : برنامه نویس وب/اندروید
@mahdidev 5 سال پیش مطرح شد
0

@miladk313
سلام
ببخشید من تازه سوال شما رو دیدم
شاید برای کار کردن کد فوق نیاز به گرفتن پرمیشن به صورت run time از کاربر باشه
ممکنه هم مشکل از ایمپورت و dependency پروژه و ... باشه
برای چک کردن دقیقش کل پروژه باید بررسی و دیباگ بشه
اگه خواستید یه جا مثل گیت آپلود کنید من کلون کنم و چک کنم یا زیپ کنید و بفرستید تا ران کنم و نتیجه رو اطلاع بدم


miladk313
تخصص : برنامه نویس لاراول
@miladk313 5 سال پیش مطرح شد
1

@mahdidev ممنون از پاسخت عزیز
اگه یه راه ارتباطی بهم بدی ممنون میشم
miladk313@gmail.com این ایمیل منه .


برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام