다음지도 인증문제같은데 조언을 부탁드립니다

안녕하세요

현재 다음지도를 연동한 앱을 안드로이드 스튜디오에서 개발중입니다.

  1. KaKaoDevelopers에서 앱 등록을 하여
    네이티브 앱 키 발급 받고 키해시 값도 등록하였습니다.

  2. 안드로이드 스튜디오에서 개발중인 앱을 실행하면 다음지도가 잘 나타납니다.

  3. apk 파일을 추출하여 developer 에 등록하고 출시를 하였습니다.
    출시된 앱을 실행하여 다음지도를 확인하면 지도는 나타나지 않고
    화면 아래 오른쪽에 daum 표시만 나타납니다.

    지도가 나타나지 않는게 인증부분과 키해시 부분인거 같은 생각입니다.
    AndroidManifest와 소스부분에는 네이티브앱키를 다 적용한거 같고
    인증부분 역시 맞게 처리한거 같은데 지도가 나타나지를 않습니다.
    키해시부분도 한번더 확인했습니다.

고수님들의 조언을 부탁드립니다.

아래는 관련소스입니다.

  1. AndroidManifest.xml
    meta-data android:name=“com.kakao.sdk.AppKey” android:value=“발급받은 네이티브 앱키 값”

  2. DaumMap.java

package com.jkm.daummap1;

import android.app.AlertDialog;
import android.content.ClipData;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.pm.ActivityInfo;
import android.graphics.Color;
import android.location.Address;
import android.location.Geocoder;
import android.os.Bundle;
import android.os.Handler;
import android.support.v4.app.FragmentActivity;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.view.View.OnClickListener;
import android.widget.Toast;

import com.skt.Tmap.TMapData;

import net.daum.mf.map.api.CalloutBalloonAdapter;
import net.daum.mf.map.api.MapPOIItem;
import net.daum.mf.map.api.MapPoint;
import net.daum.mf.map.api.MapPolyline;
import net.daum.mf.map.api.MapReverseGeoCoder;
import net.daum.mf.map.api.MapView;
import net.daum.mf.map.api.MapView.MapType;
import net.daum.mf.map.api.MapReverseGeoCoder;
import net.daum.mf.map.api.MapReverseGeoCoder.ReverseGeoCodingResultListener;
import net.daum.mf.map.api.MapView.CurrentLocationEventListener;
import net.daum.mf.map.api.MapView.MapViewEventListener;
import net.daum.mf.map.api.MapView.OpenAPIKeyAuthenticationResultListener;
import net.daum.mf.map.api.MapView.POIItemEventListener;

import net.daum.mf.map.api.MapCurrentLocationMarker;

import java.io.IOException;
import java.util.List;
import java.util.Locale;

public class DaumMap extends FragmentActivity implements MapView.MapViewEventListener, MapReverseGeoCoder.ReverseGeoCodingResultListener
, MapView.POIItemEventListener, MapView.OpenAPIKeyAuthenticationResultListener {

String daumMapKey = "발급받은 네이티브 앱키";

MapPOIItem mMarker;

GpsInfo gps;

double latitude, longitude;


private static final String LOG_TAG = "SearchDemoActivity";

private MapView mMapView;

MapPoint.GeoCoordinate geoCoordinate_start;
MapPoint point_start;

@Override
protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
    setContentView(R.layout.daum_map);


    mMapView = new MapView(this);
    
    mMapView.setDaumMapApiKey("daumMapKey");


    // 인증
    mMapView.setOpenAPIKeyAuthenticationResultListener(this);

    // 지도 이벤트 감지함
    mMapView.setMapViewEventListener(this);

    // 마커 감지 이벤트
    mMapView.setPOIItemEventListener(this);

    ViewGroup mapViewContainer = (ViewGroup) findViewById(R.id.map_view);
    mapViewContainer.addView(mMapView);
    
}

/**
 * 키 인증 처리 결과
 * 인증 성공시 현위치를 검색
 */
@Override
public void onDaumMapOpenAPIKeyAuthenticationResult(final MapView  mapView, final int result, final String resultMessage) {
    // 인증 성공시에 현위치 검색
    init_point();

}

@Override
public void onMapViewInitialized(MapView mapView) {
}

@Override
public void onMapViewCenterPointMoved(MapView mapView, MapPoint mapCenterPoint) {
}

@Override
public void onMapViewDoubleTapped(MapView mapView, MapPoint mapPoint) {
}

@Override
public void onMapViewLongPressed(MapView mapView, MapPoint mapPoint) {
}

@Override
public void onMapViewSingleTapped(MapView mapView, MapPoint mapPoint) {
}

@Override
public void onMapViewDragStarted(MapView mapView, MapPoint mapPoint) {

}

@Override
public void onMapViewDragEnded(MapView mapView, MapPoint mapPoint) {

}

@Override
public void onMapViewMoveFinished(MapView mapView, MapPoint mapPoint) {
    center_point();
}

@Override
public void onMapViewZoomLevelChanged(MapView mapView, int zoomLevel) {
}


@Override
public void onReverseGeoCoderFoundAddress(MapReverseGeoCoder mapReverseGeoCoder, String s) {
    ed_addr.setText(s);
}


@Override
public void onReverseGeoCoderFailedToFindAddress(MapReverseGeoCoder mapReverseGeoCoder) {
    // 호출에 실패한 경우.

}


@Override
public void onCalloutBalloonOfPOIItemTouched(MapView mapView, MapPOIItem mapPOIItem, MapPOIItem.CalloutBalloonButtonType calloutBalloonButtonType) {

}

@Override
@Deprecated
public void onCalloutBalloonOfPOIItemTouched(MapView mapView, MapPOIItem mapPOIItem) {
    Toast.makeText(getApplicationContext(), "Balloon 선택함", Toast.LENGTH_LONG).show();
}

@Override
public void onDraggablePOIItemMoved(MapView mapView, MapPOIItem mapPOIItem, MapPoint mapPoint) {
    Toast.makeText(getApplicationContext(), "마커 움직임", Toast.LENGTH_LONG).show();

 }


@Override
public void onPOIItemSelected(MapView mapView, MapPOIItem mapPOIItem) {
    Toast.makeText(getApplicationContext(), "마커 선택함", Toast.LENGTH_LONG).show();
}


/**
 * 처음 지도에 중간지점을 찾음
 * @author
 */
private void init_point() {

    // 기존 마커 지우기
    if (mMarker != null) {
        mMapView.removeAllPOIItems();
    }

    //mMapView.removeAllPolylines();
    gps = new GpsInfo(DaumMap.this);

    // GPS 사용유무 가져오기
    if (gps.isGetLocation()) {
        latitude = gps.getLatitude() ;
        longitude = gps.getLongitude() ;
        accuracy = gps.getAccuracy();


        // 현재위치 - 중심점
        mMapView.setMapCenterPoint(MapPoint.mapPointWithGeoCoord(latitude, longitude), true);

        // 줌 레벨 변경
        mMapView.zoomIn(true);
        mMapView.zoomOut(true);

        ed_lat.setText(String.valueOf(latitude));
        ed_long.setText(String.valueOf(longitude));
        //ed_addr.setText(getAddress(latitude, longitude));

        mMarker = new MapPOIItem();
        mMarker.setItemName("위도 : " + String.valueOf(latitude) + " 경도: " + String.valueOf(longitude));
        mMarker.setTag(0);
        mMarker.setMapPoint(MapPoint.mapPointWithGeoCoord(latitude, longitude));
        mMarker.setMarkerType(MapPOIItem.MarkerType.BluePin); // 기본으로 제공하는 BluePin 마커 모양.
        mMarker.setSelectedMarkerType(MapPOIItem.MarkerType.RedPin); // 마커를 클릭했을때, 기본으로 제공하는 RedPin 마커 모양.
        mMarker.setAlpha(0.7f);
        mMarker.setDraggable(false);
        mMapView.addPOIItem(mMarker);
    }

}

}

구글플레이에 출시한 릴리즈용 키해시도 등록하셨나요?
참조: https://developers.kakao.com/docs/android/getting-started#키해시-등록

keytool -exportcert -alias <release_key_alias> -keystore <release_keystore_path> | openssl sha1 -binary | openssl base64
릴리즈 해시키 값을 구하여
플랫폼에 키해시 입력란에 디버그용 해시키값 대신에 구한 릴리즈 해시키값을 넣고 저장을 하고 해봐도 지도가 나타나지 않습니다.

디버그 해시키값 과 릴리즈 해시키값 따로 저장을 하나요?
아니면 플랫폼 키해시 입력란만 활용하나요?
조언을 부탁드립니다

1개의 좋아요

google play app signing기능으로 앱출시를 하셨다면 로컬에서 사인한 키와 해시키가 다르므로 윗글 참조해보세요.