حمید منظر
5 سال پیش توسط حمید منظر مطرح شد
5 پاسخ

اجرای کدهای ussd بدون مشاهده صفحه call گوشی

اساتید بزرگوار اگه بخواهیم تو ری اکت نیتیو کدهای ussd (به طور مثال *۶۶۵۵*۱۰۰#) را مستقیم اجرا کنیم بدون این که این کد در صفحه شماره گیر گوشی حک بشه چیکار باید کرد؟ یعنی کاربر دیگه مجبور نباشه دکمه call را بزنه و مستقیم اجرا بشه و response دریافت کنه
۱۰۰#*۶۶۵۵*
با تشکر


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

درود

در نسخه های اولیه ری‌اکت نیتیو باید این کارو با زبان نیتیو انجام میدادید، فکر کنم هنوز به همین شکله
و پکیجی هم براش منتشر شده که iOS, Android & Windows رو پشتیبانی میکنه:
https://github.com/Kwamena-S/react-native-ussd-dial

کدهای نیتیو موجود در این پروژه رو باید با پروژه ری‌اکت نیتیو ادغام کنید.
مستنداتش هم برای سیستم عامل های مختلف رو توضیح داده


حمید منظر
@hamid.manzar 5 سال پیش مطرح شد
0

خدمت دوست عزیز علی آقای بیات عارضم که من دو تا پکیج برای این موضوع پیدا کردم که یکیش همینی هست که شما فرمودید ولی ظاهرا این پکیج خیلی معتبر نیست چون هیچ issue هم مطرح نشده
لطف کنید آخر صفحه قسمت Usage ملاحظه بفرمایید هیچی توضیح نداده
اصلا چه متدهایی داره هیچی نگفته و فقط کتابخونه را به شکل زیر معرفی کرده
import RNUssdDial from 'react-native-ussd-dial';
و اصلا روش استفاده نگفته و RNUssdDial را داده بدون هیچ پارامتری
لااقل یه پارامتری میداد که کد ussd را بشه وارد کرد
توابع dialNumber() و getDeviceName() را هم که وب استورم نشون داد کار نکرد.

کتابخونه دوم هم اینه:
https://www.npmjs.com/package/react-native-send-intent
که این هم با این که مو به مو همه مراحل نصب و تنظیماتشو انجام دادم یه مشکلی داشت که هرکاری کردم نشد که نشد
مثلا برای استفاده اینجوری گفته:
var SendIntentAndroid = require('react-native-send-intent');
SendIntentAndroid.sendPhoneDial('+55 48 9999-9999', false);
ولی تو اجرا ارور زیر را نشون میده
undefined is not an object (evaluating ‘_reactNativeSendIntent.SendINtentAndroid.sendPhoneCall’)
که اصلا پکیج را نشناخته من حتی به روش import هم تعریف کردم ولی بازم نشد و همچنان همین ارور را نشون میده
import SendIntentAndroid from ‘react-native-send-intent’;
و یا
import {SendIntentAndroid} from ‘react-native-send-intent’;


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

در پکیج دوم هم که لینکشو گذاشتید، باید ماژول رو Register کنید. در فایل "MainApplication.java":

import com.burnweb.rnsendintent.RNSendIntentPackage;  // <--- import

public class MainApplication extends Application implements ReactApplication {
  ......

  @Override
  protected List<ReactPackage> getPackages() {
    return Arrays.<ReactPackage>asList(
            new MainReactPackage(),
            new RNSendIntentPackage()); // <------ add this line to your MainApplication class
  }

  ......

}

آیا این مرحله رو هم انجام دادید؟


حمید منظر
@hamid.manzar 5 سال پیش مطرح شد
0

بله مهندس همه این مراحلی که تو نصب پکیج گفته را مو به مو انجام دادم متاسفانه جواب نداد


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

اگه پکیج ها کار نمیکنند، فکر کنم باید کد این قسمت رو به صورت بومی بنویسید و به برنامه ری‌اکت نیتیو الحاقش کنید.

کد این کار در جاوا کم و بیش شبیه زیره:
ابتدا یه متد مینویسید برای پارس کردن کد:

private Uri ussdToCallableUri(String ussd) {

    String uriString = "";

    if(!ussd.startsWith("tel:"))
        uriString += "tel:";

    for(char c : ussd.toCharArray()) {

        if(c == '#')
            uriString += Uri.encode("#");
        else
            uriString += c;
    }

    return Uri.parse(uriString);
}

و سپس در کلاس Intent متد رو لود و استفاده میکنید:

Intent callIntent = new Intent(Intent.ACTION_CALL, ussdToCallableUri(yourUSSDCodeHere));
startActivity(callIntent);

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

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