Android

Android SNS 공유하기 - 스크랩

Machine_웅 2021. 1. 12. 13:57
728x90
반응형

참고 
developers.facebook.com/docs/sharing/android

 

Android - 공유 - 문서 - Facebook for Developers

 

developers.facebook.com

superwony.tistory.com/52

 

[안드로이드/Android] SNS 링크 공유하기

안녕하세요. 이번 포스팅 주제는 '자체 선정한 국내 주요 SNS 공유하기'입니다. SNS 목록은 라인, 카카오톡, 인스타그램, 트위터, 페이스북입니다. 라인 URL 스키마를 사용한 콘텐츠 공유를 제공합

superwony.tistory.com

 

 

 

라인

URL 스키마를 사용한 콘텐츠 공유를 제공합니다. 메세지 전송이 아닌, 공유한 메세지가 입력된 채팅창이 띄워집니다.

    private void sharedLine() {

        String text = "line://msg/text/" + "메시지를 입력하렴";
        Intent intent = new Intent();
        intent.setAction(Intent.ACTION_VIEW);
        intent.setData(Uri.parse(text));
        startActivity(intent);

    }

해당 메소드가 실행되면 라인 앱이 있을 경우 라인 앱이 켜지고, 없는 경우 에러가 발생하므로 메소드 사용전 라인 앱이 존재하는지 여부를 먼저 체크하는게 좋습니다.

자세한 사항은 개발자 사이트를 참고해주세요.

 

카카오톡

카카오톡은 확장성을 고려해 URL  스키마를 활용한 공유를 더 이상 지원하지 않습니다. 카카오톡에서 제공하는 별도 sdk를 사용해서 구현해야합니다.

개발자 사이트에 나와 있는 내용이 많아 해당 포스팅에서는 다루지 않겠습니다.

 

 

인스타그램

인스타그램은 사진기반 sns로 텍스트 공유는 지원하지 않고 오직, 이미지 공유만을 지원합니다.



    private void shareImage(Uri imgUri) {

        Intent intent = new Intent(Intent.ACTION_SEND);
        intent.setType("image/*");
        intent.putExtra(Intent.EXTRA_STREAM, imgUri);
        intent.setPackage("com.instagram.android");
        startActivity(intent);
    }
    

사진 공유시 권한 체크 및 사진의 uri 가져 와야합니다. 해당 풀 소스는 아래 기재후 관련 상세 내용은 제가 기존에 작성한 포스팅 링크로 대체하겠습니다.

 

관련 포스팅

[안드로이드/Android] 권한체크하기

[안드로이드/Android] 카메라와 갤러리에서 사진 가져오기

 

전체 소스 보기

 

 

트위터

트위터는 트윗 및 리트윗 url 스키마를 제공합니다. 별도 사진 공유는 제공하지 않습니다.

private void shareTwitter() {

try {
        String sharedText = String.format("http://twitter.com/intent/tweet?text=%s",
                URLEncoder.encode("공유한다", "utf-8"));
        Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(sharedText));
        startActivity(intent);
    } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
    }
}

트위터 앱이 있는 경우 트위터 앱을 / 없는 경우 외부 브라우저의 트위터 사이트를 노출시킵니다.

 

 

페이스북

페이스북은 카카오톡과 동일하게 별도 url 및 스키마를 제공하지 않고,  sdk를 사용해야합니다.

페이스북 역시 해당 포스팅에서는 상세하게 다루지 않도록 하겠습니다.



출처: https://superwony.tistory.com/52 [개발자 키우기]


-----------------------------------------------------------------------------------------------------------------------------------

 

1) 카카오 링크 
developers.kakao.com/docs/latest/ko/getting-started/sdk-android-v1

 

Kakao Developers

카카오 API를 활용하여 다양한 어플리케이션을 개발해보세요. 카카오 로그인, 메시지 보내기, 친구 API, 인공지능 API 등을 제공합니다.

developers.kakao.com

1. Step1.build.gradle(Project)에서 카카오 레파지토리 설정

subprojects {
  repositories {
    google()
    jcenter()
    maven { url 'https://devrepo.kakao.com/nexus/content/groups/public/' }
  }
}

2.Step 2.build.gradle(Module)에 디펜던시 설정

dependencies {
    // 카카오 로그인
    implementation group: 'com.kakao.sdk', name: 'usermgmt', version: '1.30.4'

    // 카카오톡
    implementation group: 'com.kakao.sdk', name: 'kakaotalk', version: '1.30.4'

    // 카카오스토리
    implementation group: 'com.kakao.sdk', name: 'kakaostory', version: '1.30.4'

    // 카카오링크
    implementation group: 'com.kakao.sdk', name: 'kakaolink', version: '1.30.4'

    // 카카오내비
    implementation group: 'com.kakao.sdk', name: 'kakaonavi', version: '1.30.4'
}

* 카카오 링크만 사용할 것임.

 

3. 앱 키 설정

개발자 웹사이트 앱 정보의 네이티브 앱 키(NATIVE APP KEY)를 AndroidManifest.xml에서 메타데이터(meta-data)로 지정합니다. 카카오 SDK는 API 호출 시 지정된 앱 키로 권한 인증을 합니다.

<manifest ...>
<uses-permission android:name="android.permission.INTERNET" /> <!-- 인터넷 권한 추가 -->
<application>

    ...

    <meta-data
        android:name="com.kakao.sdk.AppKey"
        android:value="@string/kakao_app_key" /> <!-- 네이티브 앱 키 설정 -->
</application>

4. 키 해시(Key Hash) 등록

SDK 사용해서 키 해시 구하기

카카오 SDK를 통해서도 키 해시 확인이 가능합니다. com.kakao.util 패키지에서 제공하는 편의 기능 중 getKeyHash() 함수를 사용하여 키 해시 값을 문자열(String)로 구할 수 있습니다.

 

String keyHash = com.kakao.util.helper.Utility.getKeyHash(this /* context */);

또는

     try {
            PackageInfo info;
            info = getPackageManager().getPackageInfo("패키지 경로", PackageManager.GET_SIGNATURES);
            for (Signature signature : info.signatures) {
                MessageDigest md = MessageDigest.getInstance("SHA");
                md.update(signature.toByteArray());
                Log.e("KeyHash:", Base64.encodeToString(md.digest(), Base64.DEFAULT));
            }
        } catch (PackageManager.NameNotFoundException e) {
            e.printStackTrace();
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        }

5. 카카오 네이티브키 받아서 kakao_string.xml에 값넣기

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <!-- 카카오 디벨로퍼 앱 만들기에서 네이티브 키를 입력해주시면 됩니다. -->
    <string name="kakao_app_key">aaaaaaaaaaaaaaaaaaaa</string>
    <string name="kakao_scheme">kakaoaaaaaaaaaaaaaaaaaaaa</string>
    <string name="kakaolink_host">kakaolink</string>
    
    
</resources>

키스마는  네이티브 키 앞에 그냥 kakao만 붙인것.

 

* 커스텀 스킴(Custom scheme) 설정하기: 카카오링크 API를 사용하는 경우

사용자가 카카오링크 메시지의 버튼을 통해 앱을 실행할 수 있도록 하려면 AndroidManifest.xml 파일에 앱 실행 스킴 설정을 해야 합니다. 다음 예제를 참고합니다.

 

<activity android:name=".{YOUR_ACTIVITY_NAME}">
    <intent-filter>
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.BROWSABLE" />

        <!-- "kakao{YOUR_NATIVE_APP_KEY}://kakaolink" 형식의 앱 실행 스킴을 설정하는데 사용 -->
        <data android:host="kakaolink"
                android:scheme="kakao{YOUR_NATIVE_APP_KEY}" />
    </intent-filter>
</activity>

 

 

* Menifest.xml 내용

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="패키지 경로 ">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/테마">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>

            <intent-filter>
                <action android:name="android.intent.action.VIEW" />
                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="android.intent.category.BROWSABLE" />

                <data android:scheme="@string/kakao_scheme"
                    android:host="@string/kakaolink_host" />
            </intent-filter>

        </activity>




        <meta-data
            android:name="com.kakao.sdk.AppKey"
            android:value="@string/kakao_app_key" />

    </application>

</manifest>

 

카카오 링크 버튼 이벤트 

// 참고 주소  https://thisisspear.tistory.com/52
     public void kakaolink() {
        FeedTemplate params = FeedTemplate
                .newBuilder(ContentObject.newBuilder("디저트 사진",
                        "http://mud-kage.kakao.co.kr/dn/NTmhS/btqfEUdFAUf/FjKzkZsnoeE4o19klTOVI1/openlink_640x640s.jpg",
                        LinkObject.newBuilder().setWebUrl("https://developers.kakao.com")
                                .setMobileWebUrl("https://developers.kakao.com").build())
                        .setDescrption("아메리카노, 빵, 케익")
                        .build())
                .setSocial(SocialObject.newBuilder().setLikeCount(10).setCommentCount(20)
                        .setSharedCount(30).setViewCount(40).build())
                .addButton(new ButtonObject("웹에서 보기", LinkObject.newBuilder().setWebUrl("'https://developers.kakao.com").setMobileWebUrl("'https://developers.kakao.com").build()))
                .addButton(new ButtonObject("앱에서 보기", LinkObject.newBuilder()
                        .setWebUrl("'https://developers.kakao.com")
                        .setMobileWebUrl("'https://developers.kakao.com")
                        .setAndroidExecutionParams("key1=value1")
                        .setIosExecutionParams("key1=value1")
                        .build()))
                .build();

        Map<String, String> serverCallbackArgs = new HashMap<String, String>();
        serverCallbackArgs.put("user_id", "${current_user_id}");
        serverCallbackArgs.put("product_id", "${shared_product_id}");

        KakaoLinkService.getInstance().sendDefault(this, params, serverCallbackArgs, new ResponseCallback<KakaoLinkResponse>() {
            @Override
            public void onFailure(ErrorResult errorResult) {
                Logger.e(errorResult.toString());
            }

            @Override
            public void onSuccess(KakaoLinkResponse result) {
                // 템플릿 밸리데이션과 쿼터 체크가 성공적으로 끝남. 톡에서 정상적으로 보내졌는지 보장은 할 수 없다. 전송 성공 유무는 서버콜백 기능을 이용하여야 한다.
            }
        });
    }

메세지 형식 참고 

 

developers.kakao.com/docs/latest/ko/message/android

 

Kakao Developers

카카오 API를 활용하여 다양한 어플리케이션을 개발해보세요. 카카오 로그인, 메시지 보내기, 친구 API, 인공지능 API 등을 제공합니다.

developers.kakao.com

 

 

--- 작성중

728x90
반응형

'Android' 카테고리의 다른 글

Android kakao link (카카오 링크) 코드  (0) 2021.01.13
키해시 구하기  (1) 2021.01.12
(시간 동기화 관련)날자 형식 -> 밀리세컨드 로 변환  (0) 2020.12.08
android status bar 숨기기  (0) 2020.11.30
해시키 추출  (0) 2020.11.11