Notice
Recent Posts
Recent Comments
Link
투케이2K
40. (TWOK/UTIL) [Android/Ios] 브로드 캐스트 알림 및 노티피케이션 알림 채널 등록 , 실시간 알림 확인 본문
투케이2K 유틸파일
40. (TWOK/UTIL) [Android/Ios] 브로드 캐스트 알림 및 노티피케이션 알림 채널 등록 , 실시간 알림 확인
투케이2K 2022. 4. 19. 16:20[설 명]
프로그램 : Android / Ios
설 명 : 브로드 캐스트 알림 및 노티피케이션 알림 채널 등록 , 실시간 알림 확인
[IOS : 데이터 없음 : 소스 코드]
// -----------------------------------------
// [IOS : 보내는 쪽 : 데이터 없음]
NotificationCenter.default.post(
name: Notification.Name(S_FinalData.NOTI_RECEIVE_CUSTOM_ALERT), // [알림을 식별하는 채널]
object: nil, // [발송자가 옵저버에게 보내려고 하는 객체]
userInfo: nil // [전송 데이터]
)
// -----------------------------------------
// -----------------------------------------
// [IOS : 받는 쪽 : 데이터 없음]
[1] 뷰 컨트롤러 viewDidLoad 메모리 로드 부분에서 채널 등록 실시
NotificationCenter.default.addObserver(
self, // [뷰 컨트롤러]
selector: #selector(self.NOTI_RECEIVE_CUSTOM_ALERT), // [실시간 알림 처리를 수행하는 메소드]
name: NSNotification.Name(S_FinalData.NOTI_RECEIVE_CUSTOM_ALERT), // [채널 등록 실시]
object: nil // [객체]
)
[2] 실시간 알림 처리를 수행하는 메소드 등록 실시
@objc func NOTI_RECEIVE_CUSTOM_ALERT() {
print("")
print("====================================")
print("[\(self.ACTIVITY_NAME) >> NOTI_RECEIVE_CUSTOM_ALERT() :: [실시간 알림 받음] 커스텀 팝업창 활성]")
print("====================================")
print("")
}
[3] 뷰 컨트롤러 viewDidDisappear 화면 종료 부분에서 채널 해제 실시
NotificationCenter.default.removeObserver(
self, // [뷰 컨트롤러]
name: NSNotification.Name(S_FinalData.NOTI_RECEIVE_CUSTOM_ALERT), // [채널 해제 실시]
object: nil // [객체]
)
[4] 뷰 컨트롤러 전역 변수에 deinit 선언 및 메모리 해제 시 채널 해제 실시
deinit {
NotificationCenter.default.removeObserver(
self, // [뷰 컨트롤러]
name: NSNotification.Name(S_FinalData.NOTI_RECEIVE_CUSTOM_ALERT), // [채널 해제 실시]
object: nil // [객체]
)
}
// -----------------------------------------
[IOS : 데이터 있음 : 소스 코드]
// -----------------------------------------
// [IOS : 보내는 쪽 : 데이터 있음]
NotificationCenter.default.post(
name: NSNotification.Name(rawValue: S_FinalData.NOTI_RECEIVE_PUSH_MESSAGE), // [알림을 식별하는 채널]
object: nil, // [발송자가 옵저버에게 보내려고 하는 객체]
userInfo: ["message" : sendDic] // [데이터 전송 : 객체의 저장소 [AnyHashable: Any] 형태 : value 데이터는 딕셔너리 객체로 넣음]
)
// -----------------------------------------
// -----------------------------------------
// [IOS : 받는 쪽 : 데이터 있음]
[1] 뷰 컨트롤러 viewDidLoad 메모리 로드 부분에서 채널 등록 실시
NotificationCenter.default.addObserver(
self, // [뷰 컨트롤러]
selector: #selector(self.NOTI_RECEIVE_PUSH_MESSAGE(_:)), // [실시간 알림 처리를 수행하는 메소드]
name: NSNotification.Name(S_FinalData.NOTI_RECEIVE_PUSH_MESSAGE), // [채널 등록 실시]
object: nil // [객체]
)
[2] 실시간 알림 처리를 수행하는 메소드 등록 실시
@objc func NOTI_RECEIVE_PUSH_MESSAGE(_ notification:NSNotification) {
print("")
print("====================================")
print("[\(self.ACTIVITY_NAME) >> NOTI_RECEIVE_PUSH_MESSAGE() :: [실시간 알림 받음] 푸시 메시지 확인]")
print("message :: \(String(describing: notification.userInfo!["message"]))")
print("====================================")
print("")
// -----------------------------------------
// [message 키 값에 포함된 value 값 전체를 딕셔너리 형태로 받음]
guard let checkDictionary = notification.userInfo!["message"] as? Dictionary<String, Any>
else {
print("")
print("====================================")
print("[\(self.ACTIVITY_NAME) >> NOTI_RECEIVE_PUSH_MESSAGE() :: [실시간 알림 받음] 푸시 메시지 확인]")
print("error :: 데이터 딕셔너리 타입 확인 에러")
print("====================================")
print("")
// [리턴 종료]
return
}
// -----------------------------------------
// [딕셔너리 데이터를 JSON 으로 변환 실시]
var jsonObj : String = ""
do {
let jsonCreate = try JSONSerialization.data(withJSONObject: checkDictionary, options: .prettyPrinted)
// json 데이터를 변수에 삽입 실시
jsonObj = String(data: jsonCreate, encoding: .utf8) ?? ""
} catch {
print("")
print("====================================")
print("[\(self.ACTIVITY_NAME) >> NOTI_RECEIVE_PUSH_MESSAGE() :: [실시간 알림 받음] 푸시 메시지 확인]")
print("catch :: 딕셔너리 JSON 변환 에러")
print("====================================")
print("")
// [리턴 종료]
return
}
// -----------------------------------------
///*
// [팝업창 알림 표시 수행]
self.showAlert(
type:0,
tittle: S_FinalData.AL_TITLE,
content: jsonObj,
okBtb: S_FinalData.AL_OK,
noBtn: S_FinalData.AL_NO
)
// */
// -----------------------------------------
}
[3] 뷰 컨트롤러 viewDidDisappear 화면 종료 부분에서 채널 해제 실시
NotificationCenter.default.removeObserver(
self, // [뷰 컨트롤러]
name: NSNotification.Name(S_FinalData.NOTI_RECEIVE_PUSH_MESSAGE), // [채널 해제 실시]
object: nil // [객체]
)
[4] 뷰 컨트롤러 전역 변수에 deinit 선언 및 메모리 해제 시 채널 해제 실시
deinit {
NotificationCenter.default.removeObserver(
self, // [뷰 컨트롤러]
name: NSNotification.Name(S_FinalData.NOTI_RECEIVE_PUSH_MESSAGE), // [채널 해제 실시]
object: nil // [객체]
)
}
// -----------------------------------------
[AOS : 소스 코드]
// -----------------------------------------
// [안드로이드 : 보내는 쪽]
// TODO [푸시 메시지 브로드 캐스트 알림 전달]
try {
Intent intent = new Intent(S_FinalData.NOTI_RECEIVE_PUSH_MESSAGE); // [채널 명칭 지정]
intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION); // [플래그 설정]
intent.putExtra("message", sendRecive.toString()); // [데이터 전달]
LocalBroadcastManager.getInstance(this).sendBroadcast(intent); // [브로드 캐스트 알림 전달]
}
catch (Exception e){
e.printStackTrace();
}
// -----------------------------------------
// -----------------------------------------
// [안드로이드 : 받는 쪽]
[1] Activity [onCreate] 부분에 리시버 채널 등록 실시
// TODO [브로드 캐스트 알림을 받기 위해 채널 등록 수행 실시]
try {
IntentFilter filter = new IntentFilter(); // [인텐트 필터 선언]
filter.addAction(S_FinalData.NOTI_RECEIVE_PUSH_MESSAGE); // [푸시 알림 받기 위함]
LocalBroadcastManager.getInstance(A_Main.this).registerReceiver(mMessageReceiver, filter); // [알림을 받는 리시버 지정]
}
catch (Exception e){
e.printStackTrace();
}
[2] 실시간 브로드 캐스트 알림 받기 메소드 등록
// TODO [실시간 브로드 캐스트 알림 수신 부분]
private BroadcastReceiver mMessageReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
Log.i("---","---");
Log.w("//===========//","================================================");
Log.i("","\n"+"["+String.valueOf(ACTIVITY_NAME)+" >> onReceive() :: 실시간 브로드 캐스트 알림 전달 받음]");
Log.i("","\n"+"[채 널 :: "+String.valueOf(intent.getAction())+"]");
Log.w("//===========//","================================================");
Log.i("---","---");
// ------------------------------------------
// [푸시 알림을 받은 경우 : C_FirebaseMessagingService]
if(S_FinalData.NOTI_RECEIVE_PUSH_MESSAGE.equals(String.valueOf(intent.getAction()))) {
// [인텐트로 전달 받은 메시지 확인]
String message = String.valueOf(intent.getStringExtra("message"));
/*
// [팝업창 호출 실시]
C_Ui_View.showAlert(
A_Main.this,
0,
S_FinalData.AL_TITLE,
message,
S_FinalData.AL_OK,
S_FinalData.AL_NO,
"");
// */
}
// ------------------------------------------
}
};
[3] Activity [onDestroy] 부분에 리시버 채널 해제 실시
// TODO [브로드 캐스트 알림 채널 해제 실시]
try {
LocalBroadcastManager.getInstance(this).unregisterReceiver(mMessageReceiver);
}
catch (Exception e){
e.printStackTrace();
}
// -----------------------------------------
반응형
'투케이2K 유틸파일' 카테고리의 다른 글
Comments