포스트맨에서 파이어베이스 푸시 테스트!!

POST 형식 url : https://fcm.googleapis.com/fcm/send

Headers

KEY VALUE
Authorization key= server key
Content-Type application/json
   

Body raw (application/json)

{
    "to":"받을 사람 firebase token key",
    "notification":{
      "title":"제목",
      "body":"바디"
      ...
    },
    "data" : {
      "letterId" : "CUXbq8XrXOBOw8bWfMkz"
      ...
    }
}

보내면 push 가 성공적으로 200 떨어진다.

빌드 타입 별 스트링 관리

페이스북 소셜 연동 시 다음과 같은 facebook 앱 아이디 정보가 필요하다.

<meta-data
    android:name="com.facebook.sdk.ApplicationId"
    android:value="@string/facebook_app_id" />

페이스북 소셜 연동 시 live , dev , stage 세가지로 나눠서 작업을 하고 있는데 facebook_app_id 가 각각 build Type 별로 다르기 때문에 type이 바뀔 때 마다 동적으로 변경 되어야 하는 문제가 생겼다.

   buildTypes {
        release {
            resValue "string", "facebook_app_id","페이스북 앱 아이디"
            resValue "string", "fb_login_protocol_scheme","fb페이스북 앱 아이디"
        }
        staging {
            resValue "string", "facebook_app_id","페이스북 앱 아이디"
            resValue "string", "fb_login_protocol_scheme","fb페이스북 앱 아이디"
        }
        dev {
            resValue "string", "facebook_app_id","페이스북 앱 아이디"
            resValue "string", "fb_login_protocol_scheme","fb페이스북 앱 아이디"
        }
    }

buildType 별로 facebook_app_id , fb_login_protocol_scheme 각각 string 정보에 설정한 값이 들어가게 된다.

안드로이드 외부 공유

외부공유 소스

String title = context.getString(R.string.title);
String plainContent = context.getString(R.string.plain_content);
String htmlContent = context.getString(R.string.html_content);

Intent shareIntent = new Intent(Intent.ACTION_SEND);
shareIntent.setType("text/plain");
shareIntent.putExtra(Intent.EXTRA_SUBJECT, title);
shareIntent.putExtra(Intent.EXTRA_TEXT, plainContent);
shareIntent.putExtra(Intent.EXTRA_HTML_TEXT, htmlContent);
context.startActivity(Intent.createChooser(shareIntent, context.getString(R.string.share_text)));

Intent.EXTRA_TEXT , Intent.EXTRA_HTML_TEXT 두가지 타입 모두 보내준다. 앱을 통해 공유 하게 되면 선택 되는 앱이 다양하기 때문에 그냥 TEXT 정보를 가져가는 앱이 있고 HTML_TEXT 정보를 가져가는 앱이 있다. Content 내용에 링크를 걸지 않는 다면 Intent.EXTRA_TEXT 만 작성하더라도 괜찮다. HTML_TEXT 가 없을 경우 EXTRA_TEXT 정보를 가져간다. G-mail 경우는 Intent.EXTRA_TEXT 만 넣어 줬을 때도 링크가 걸리는걸 볼수 있었다. 몇몇 앱은 지원이 되지만 안되는 예외 사항이 있기 때문에 모두 지원 하려면 HTML_TEXT를 같이 넣어 주는게 좋다.

파이어스토어 색인을 이용한 복합쿼리

기존 Realtime Database 는 다중 쿼리를 지원하지 않아서 다중 쿼리 처럼 사용하기 위해서 필드를 하나 더 만들어야 하는 번거러움이 있었다. 하지만 firestore는 색인을 사용해서 다중 쿼리를 사용할 수 있다.

FireStore 데이터 베이스의 컬렉션 ID로 구분 된다.

처음 색인을 보면 answer 컬렉션 ID 를 가지는 곳에 다중 쿼리를 사용할 수 있는 것은 letterId, time 을 이용한 쿼리를 사용할 수있다. letterId, answerId 라고 다중 쿼리를 사용하게 되면 등록된 색인이 없기 때문에 쿼리를 사용했을 때 fail로 응답이 온다. 추가적으로 더 많은 필드를 원하면 3개이상도 가능 하다.

view pressed 상태 되었을 때 알파 50% 먹이기

커스텀 뷰에서는 onTouch 메소드 오버라이드 해서 사용

   @Override
    public boolean onTouch(View v, MotionEvent event) {

        switch (event.getAction()) {
            case MotionEvent.ACTION_DOWN:
                v.setAlpha((float) 0.5);
                break;
            case MotionEvent.ACTION_UP:
            case MotionEvent.ACTION_CANCEL:
                v.setAlpha((float) 1);
                break;
        }
        return false;
    }

ACTION_DOWN 상태에서는 Pressed 상태 ACTION_UP 상태에서는 그 뷰에서 뗀 상태 ACTION_CANCEL 프레스 상태에서 그 뷰를 벗어난 곳에서 뗀 상태 에서 각각 Action을 가진다.

프레스 되면 0.5 알파 값 주고 떼면 다시 원상태 복구