ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Android]안드로이드 앱에 SNS공유 기능 넣기(with 페이스북 링크)
    Development/Android 2016. 12. 21. 01:27
    반응형


     테스트 환경

     안드로이드 버전

    6.0.1 

    기기명(모델) 

    삼성 갤럭시노트4S-LTE(SM-N916L) 

     개발 툴

    안드로이드 스튜디오 2.2.3 

    테스트 날짜 

    2016-12-21 



    이번에는 페이스북 openAPI를 활용하여 공유하는 방법을 설명 드립니다.




    사용법은 카카오톡 링크 거는 법과 비슷합니다. (아래 링크 참고)


    [Android]안드로이드 앱에 SNS공유 기능 넣기(with 카카오링크)


    우선 페이스북 개발자 홈페이지(https://developers.facebook.com/)로 가서 회원가입(혹은 로그인)을 한 뒤 키 다음 절차를 따릅니다.


    우측 상단에서 [새 앱 추가]를 눌러 추가합니다.



    해당 사항을 입력 후 [앱 ID 만들기]를 누릅니다.




    이후 왼쪽 탭에서 [대시보드]에 들어가면 


    자신의 [앱 ID]값이 나오는데 이는 메모장에 따로 복사를 해둡니다.


    [플랫폼 선택]을 누르고 해당 OS(안드로이드)를 선택하면 다음과 같은 창이 뜹니다.



    패키지명과 시작 액티비티 클래스명을 입력합니다. 

    (위 화면 자세히 보시면 정말 상세하게 어떻게 진행하는지 잘 나와있습니다)


    그러면 HashKey를 입력하라고 나옵니다. 디버그용, 릴리즈(배포)용 HashKey를 얻는 법은 위에 친절히 설명되어 있습니다.




    [페이스북 디버그용 해시 키 생성]



    윈도우키 + R을 눌러 명령프롬프트를 실행하여


    keytool -exportcert -alias androiddebugkey -keystore %HOMEPATH%\.android\debug.keystore | openssl sha1 -binary | openssl base64


    위 내용을 그대로 복사 후 붙여 넣습니다.  (위 내용은 윈도우용입니다)


    // 다른 글에서는 KeyTool.exe 파일이 있는 [C:\Program Files\Java\jre1.8.0_111\bin] 폴더에서 실행하라는 말도 있던데 저는 그냥 cmd에서 실행해도 되더라구요~


    비밀번호는 android 입니다. 





    [페이스북 릴리즈용 해시키 생성]


    릴리즈용으로 해시키를 생성하려면 다음과 같이 하면됩니다.


    keytool -exportcert -alias YOUR_RELEASE_KEY_ALIAS -keystore YOUR_RELEASE_KEY_PATH | openssl sha1 -binary | openssl base64

    처음엔 YOUR_RELEASE_KEY_ALIAS와 YOUR_RELEASE_KEY_PATH에 뭘 넣어야 되는지 몰라 5분정도 구글링하느라 시간낭비했습니다 ㅠ



    안드로이드 스튜디오에서 [Build]-[Generate Signed APK]에 들어가면 다음과 같은 창이 뜹니다.


    YOUR_RELEASE_KEY_PATH = > Key store path

    YOUR_RELEASE_KEY_ALIAS = > Key alias

    키 저장소  비밀번호 = > Key store password

    이렇게 매칭해주면 됩니다.


     

    키가 없으신 분들은 Create New..를 눌러서 생성하시면 됩니다.




    그럼 위 화면처럼 비밀번호를 입력하라고 하면 키 스토어 암호를 입력합니다. 그리고 해시키가 나타납니다.


    0E+X2ABl7cdef+/QEwsJMvakSK5A= .. 뭐 이런식으로 나옵니다 


    해시키를 입력하면 또 다음과 같이 화면이 나타납니다. 이 곳에는 해시키를 여러개 등록 할 수 있는데 디버그용, 릴리즈용 둘 다 등록하셔도 무방합니다.



    그리고 SSO (Singl Sign On)도 YES로 바꿔줍니다.








    주의사항 : 비밀번호가 틀려도 오류가 발생하거나 다른 값을 넘겨주지 않습니다. 다만 다른 해시키 값을 알려 줄 뿐입니다.

    이를 정확히 넘겨짚고 가시려면 안드로이드 소스파일에 다음 내용을 입력하여 디버그해서 로그 기록을 살펴봅니다.

    릴리즈용은 릴리즈 한뒤 로그를 보시면 알 수 있습니다.


    try {
    PackageInfo info = getPackageManager().getPackageInfo( getPackageName(), PackageManager.GET_SIGNATURES);
    for (Signature signature : info.signatures) {
    MessageDigest md = MessageDigest.getInstance("SHA");
    md.update(signature.toByteArray());
    Log.d("KeyHash:", Base64.encodeToString(md.digest(), Base64.DEFAULT));
    }
    } catch (PackageManager.NameNotFoundException e) {
    Log.d("KeyHash:", "name not found");
    } catch (NoSuchAlgorithmException e) {
    Log.d("KeyHash:", "no such");
    }











    [안드로이드 설정]


    이제부터는 다시 안드로이드 스튜디오에서 설정을 진행하면 됩니다.


    1. 우선 페이스북 SDK는 안드로이드 4.0.3 혹은 그 이상버전에서 작동을 하므로 프로젝트 생성 시 min sdk를 최소 4.0.3버전으로 설정해주세요.


    2. 그리고  build.gradle(Module:app)에서 다음 내용을 추가합니다.


    repositories {
            mavenCentral()
        }
    compile 'com.facebook.android:facebook-android-sdk:4.+'





    3. values-strings.xml에 다음과 같이 facebook id값을 추가합니다. 이 아이디값은 본인 앱 ID 값을 말합니다.


    <string name="facebook_app_id">1234567890123456</string>

    4. AndroidManifest.xml에 다음과 같이 인터넷 퍼미션을 추가합니다.

    <uses-permission android:name="android.permission.INTERNET"/>

    5. 그리고 이어서 다음과 같이 내용을 입력합니다.


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

    6. 끝으로 페이스북 공유를 위해 더 추가합니다.


    <provider android:authorities="com.facebook.app.FacebookContentProvider1234567890123456"
    android:name="com.facebook.FacebookContentProvider" android:exported="true"/>

    1234567890123456 를 지우고 자신의 앱 ID값을 입력하면 됩니다.




    (이미지를 클릭하면 원본 크기로 볼 수 있습니다)






    자, 이제 아래 소스만 입력하면 끝입니다!


    onCreate() 메소드에  아래와 같이 페이스북 api를 사용할 수 있도록 준비합니다.


    FacebookSdk.sdkInitialize(getApplicationContext());
    AppEventsLogger.activateApp(this);



    그리고 사용하면 끝이죠~


    public void shareFacebook()
    {
    ShareLinkContent content = new ShareLinkContent.Builder()

            //링크의 콘텐츠 제목
    .setContentTitle("페이스북 공유 링크입니다.")

    //게시물에 표시될 썸네일 이미지의 URL
    .setImageUrl(Uri.parse("https://lh3.googleusercontent.com/hmVeH1KmKDy1ozUlrjtYMHpzSDrBv9NSbZ0DPLzR8HdBip9kx3wn_sXmHr3wepCHXA=rw"))

    //공유될 링크
    .setContentUrl(Uri.parse("https://play.google.com/store/apps/details?id=com.handykim.nbit.everytimerfree"))

    //게일반적으로 2~4개의 문장으로 구성된 콘텐츠 설명
    .setContentDescription("문장1, 문장2, 문장3, 문장4")
    .build();

    ShareDialog shareDialog = new ShareDialog(this);
    shareDialog.show(content, ShareDialog.Mode.FEED);   //AUTOMATIC, FEED, NATIVE, WEB 등이 있으며 이는 다이얼로그 형식을 말합니다.

    }


    만약 다음과 같은 에러가 뜬다면 아래처럼 설정해주세요~ 



     Caused by: java.lang.NoSuchMethodError: No direct method <init>(Landroid/widget/ImageView;Landroid/support/v7/widget/AppCompatDrawableManager;)V in class Landroid/support/v7/w



    저 같은 경우는 FloatingActionButton과 페이스북 sdk 간에 무언가 충돌이 일어나지 않았나 싶은데요


    Gradle.build(app)에 


    compile 'com.android.support:appcompat-v7:24.2.0'
    compile 'com.android.support:design:24.2.0'
    compile 'com.android.support:support-v4:24.2.0'


    이처럼 24.2.0으로 버전을 올려준 뒤 컴파일하니 해결되었습니다.





    아, 참고로 페이스북에서는 앱에서 iTunes나 Google Play 스토어의 링크를 공유하는 경우 공유된 콘텐츠에 지정하는 설명이나 이미지는 게시하지 않습니다. 


    상업용으로 사용하는걸 방지하기 위해서인 것 같네요 ㅎㅎ 참고하세요




    앱 다운로드 : https://play.google.com/store/apps/details?id=com.handykim.nbit.everytimerfree


    개발된 앱 정보 보기 : http://citynetc.tistory.com/146




    2016/12/20 - [Programming/Android] - [Android]안드로이드 앱에 SNS공유 기능 넣기(with 카카오링크)

    2016/12/22 - [Programming/Android] - [Android]안드로이드 앱에 SNS공유 기능 넣기(with 트위터 링크)

    2016/12/23 - [Programming/Android] - [Android]안드로이드 앱에 SNS공유 기능 넣기(with 인스타그램 링크)

    2016/12/23 - [Programming/Android] - [Android]안드로이드 앱에 SNS공유 기능 넣기(with 라인)





    반응형

    댓글

Designed by Tistory.