omise-react-native 0.0.4 มาแล้วว

ก่อนหน้านี้ผมได้สร้าง package สำหรับคนที่ต้องการใช้งาน Omise ด้วย react-native โดยสามารถสร้าง Token ได้

ที่ผ่านมาทาง Omise ได้มี API ใหม่ที่ชื่อว่า Source API (สำหรับ API version 2017-11-02 ขึ้นไป) ซึ่งเจ้า Source API นี้มันทำตัวคล้ายๆกับ Token แต่ไม่ได้สร้างขึ้นจากข้อมูลบัตรเครดิต แต่สร้างขึ้นเพื่อสำหรับชำระด้วยวิธีอื่นๆที่ไม่ใช่บัตรเครดิต เช่น Internet Banking, Alipay หรือ Bill Payment เป็นต้น ซึ่งตอนนี้ผมทำให้รองรับการสร้าง Source จาก Source API ของ Omise ได้เรียบร้อยครับ

Continue reading “omise-react-native 0.0.4 มาแล้วว”

Expo กับ `OnActivityResult` Event

เมื่อไม่นานมานี้ได้ทดลองเขียน App บนมือถือโดยใช้ Expo ในการพัฒนา

ก่อนอื่นก็เกริ่นก่อนว่า Expo จริงๆแล้วก็คือ React-Native นั่นแหละ แต่เพียง Expo เป็น SDK ตัวหนึ่งที่ bundle library ต่างๆที่ทำให้เราไม่จำเป็นต้องไปโหลด dependency อื่นๆ หรือต้องมานั่งเขียน bridge ระหว่างตัว javascript กับ Android Native หรือ iOS Native (เอาจริงๆก็มีบ้างที่ต้องทำแบบนั้น)

ในกรณีที่ผมเขียนนั้นตัว Expo SDK เอง ไม่มี library ที่ตัวผมเองต้องการ จึงต้องทำการ detach project เพื่อเขียน bridge ระหว่างตัว Android Native กับ Expo

โดยปกติแล้วหากเขียน Component เพื่อดำเนินการ Login กับ 3rd Party ข้างนอกใน Android Native เพื่อให้ React-native สามารถใช้งานได้ ในตัว Component ก็ต้องมี method เพื่อรับสถานะการ Login หลังจากมีการ Login เสร็จสมบูรณ์นั้นก็คือ OnActivityResult นั่นเอง

แต่ปัญหาที่พบคือเจ้า Expo เนี่ยมันไม่ยิง Event เข้าตัวนี้เลยนี่สิ… งานเข้าแล้วเลยทำการ Debug Project ไปเรื่อยๆ จนได้เจอตัวนี้ `host.exp.exponent.ActivityResultListener`

วิธีการเขียนก็ง่ายๆครับ

private final host.exp.exponent.ActivityResultListener mActivityEventListener = new host.exp.exponent.ActivityResultListener() {
    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
          // some code here
     }
};

จากนั้นก็ Register เข้า constructor เป็นอันเสร็จสิ้น

public class Sample extends ReactContextBaseJavaModule {

    private final host.exp.exponent.ActivityResultListener mActivityEventListener = new host.exp.exponent.ActivityResultListener() {
        @Override
        public void onActivityResult(int requestCode, int resultCode, Intent data) {
          // some code here
        }
    };
    public Sample(ReactApplicationContext reactContext) {
        super(reactContext);
        Exponent.getInstance().addActivityResultListener(mActivityEventListener);
    }
}

แค่นี้ก็สามารถใช้งาน OnActivitiyResult แบบเดิมได้แล้วครับ