آموزشهای پراکنده از دنیای برنامه نویسی اندروید
باسلام
مدتی است در گروه ها با سوال روش برگشتن مستقیم به اپ از طریق درگاه پرداخت و یا آدرس وب مواجه میشم که خواستم یه راهنمای ساده در این مورد تهیه کنم بلکه نیاز دوستان برطرف شد.
برای برگشت به داخل اپ و یا بازشدن یک آدرس خاص از روش دیپ لینک استفاده میشود. این روشی که درحال توضیح هستم یک حالت خاصی از دیپ لینک می باشد که مزیتش نپرسیدن اپلیکیشن منبع می باشد چون آدرس های دیپ لینک با مرورگر هم ممکنه باز بشه.
برای بازگشت به اپ مورد نظر باید در سمت سرور خود به آدرسی با ساختار زیر ریدارکت کنیم.
intent://123#Intent;scheme=varchar;package=ir.technopedia.redirect;end
عدد بعد intent:// مقداری می باشد که برای اپ ارسال میکنیم.
scheme=varchar
قسمت varchar با توجه به تعریف شما در منیفست اپلیکیشن میتواند متفاوت باشد.
package=ir.technopedia.redirect
مقدار package هم که نام پکیج اپلیکیشنی هست که میخواهید به آن برگردید.
1- یک اکتیویتی به اپلیکیشن خود اضافه کنید. و در قسمت منیفست تغییرات زیر را به اکتیویتی مورد نظر اعمال کنید.این تغییرات باعث فعال شدن دیپ لینک در اپلیکیشن می شود.
<activity android:name=".RecieverActivity">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="varchar" /> // مقداری که در توضیح آموزش سمت وب نوشته بودم وابسته به منیفست می باشد.
</intent-filter>
</activity>
2- کدهای زیر را در تابع onCreate اکتیویتی خود کپی کنید و حالت های مختلف را هندل کنید.
در این آموزش برای هر مقدار دریافتی عددی فقط toast نمایش میدیم.
public class RecieverActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_reciever);
Intent in = getIntent();
Uri data = in.getData();
// دو سطر بالا دیتاهای ارسال شده به اکتیویتی را دریافت مینماید و به data کپی میکند.
if (data != null) {
// در سطر زیر عبارت "varchar://" را از داده های دریافتی حذف مینماییم این عبارت همان بخش scheme موجود در منیفست می باشد.
String rdata = data.toString().replace("varchar://", "");
// حال rdata شامل داده هاییست که بعد intent:// در قسمت آموزش سمت وب فرستاده شده است می باشد.
//برای این آموزش فقط عدد ارسال کرده ایم. و حالت های مختلف را با توست هندل میکنیم.
if (rdata.equals("1")) {
Toast.makeText(getBaseContext(), "موفقیت", Toast.LENGTH_LONG).show();
} else {
Toast.makeText(getBaseContext(), "عدم موفقیت", Toast.LENGTH_LONG).show();
}
}
}
}