Last active
July 25, 2018 12:40
-
-
Save rlarla245/d4d4483f776058c755d05c79f81eebbb to your computer and use it in GitHub Desktop.
Firebase 13 - Receive DynamicLink
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
13. Firebase – Receive DynamicLink | |
● 메모장, 카카오톡에 url 올리면 기타 앱, 이벤트에 참여 및 발생하게 됩니다. | |
● 예를 들어, 맛집 url을 올리면 관련 문서로 바로 이동하게 됩니다. | |
* Firebase 서버를 통해 링크를 작동시킵니다. | |
1. 문서로 이동합니다. 다이나믹 링크 수신 탭으로 이동합니다. Intent-filter를 매니페스트 내 해당 액티비티에 입력합니다. | |
- 호스트에 입력한 주소와 앱 내 링크 주소가 동일하면 작동시키는 원리라고 볼 수 있습니다. | |
- http는 삭제합니다. | |
- 앱 코드를 불러와 호스트 주소에 입력합니다. | |
2. 이전 링크 생성 코드들을 새로운 메소드 안의 바디로 집어넣습니다. createDeepLink()와 같이 만듭니다. | |
3. 문서 하단에 이벤트를 발생시키는 코드를 가져옵니다. 이것을 onCreate 내부에 입력합니다. 로그 코드는 삭제합니다. | |
FirebaseDynamicLinks.getInstance() | |
.getDynamicLink(getIntent()) | |
.addOnSuccessListener(this, new | |
OnSuccessListener<PendingDynamicLinkData>() { | |
@Override | |
public void onSuccess | |
(PendingDynamicLinkData pendingDynamicLinkData) { | |
// Get deep link from result (may be null if no link is found) | |
Uri deepLink = null; | |
if (pendingDynamicLinkData != null) { | |
// 하단의 딥 링크가 링크를 가져온 변수입니다. | |
deepLink = pendingDynamicLinkData.getLink(); | |
getTime(deepLink.toString()); | |
} | |
} | |
}) | |
.addOnFailureListener(this, new OnFailureListener() { | |
@Override | |
public void onFailure(@NonNull Exception e) { | |
} | |
}); | |
4. 이제 이 딥링크를 활용해 데이터를 집어넣습니다. | |
- 넘어오는 레이아웃의 TextView에 id를 입력합니다. 이를 생성 및 호출합니다. | |
5. 이제 웹에서 데이터를 가져옵시다. 라이브러리부터 호출합니다. | |
- okhttp 라이브러리를 가져옵니다. | |
6. 간단하게 시간을 출력하는 기능을 구현하기 위해 해당 액티비티에 getTime 메소드를 생성합니다. | |
void getTime(String url){ | |
OkHttpClient okHttpClient = new OkHttpClient(); | |
okHttpClient.newCall | |
(new Request.Builder().url(url).build()).enqueue(new Callback() { | |
@Override | |
public void onFailure(Call call, IOException e) { | |
} | |
@Override | |
public void onResponse(Call call, final Response response) throws IOException { | |
new Handler(getMainLooper()).post(new Runnable() { | |
@Override | |
public void run() { | |
try { | |
JSONObject jsonObject | |
= new JSONObject(response.body().string()); | |
textView.setText(jsonObject.getString("time")); | |
} catch (JSONException e) { | |
e.printStackTrace(); | |
} catch (IOException e) { | |
e.printStackTrace(); | |
} | |
} | |
}); | |
} | |
}); | |
} | |
7. 이제 해당 url을 생성하는 방식에 대해 알아봅시다. | |
- 새 동작 링크를 누릅니다. | |
- 딥 링크 url은 http://date.jsontest.com으로 보입니다. | |
- 이름도 지정합니다. | |
- 링크 동작 정의에서 해당 앱을 선택합니다. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public class DynamicLinkClass extends AppCompatActivity { | |
public TextView textView; | |
@Override | |
protected void onCreate(Bundle savedInstanceState) { | |
super.onCreate(savedInstanceState); | |
setContentView(R.layout.activity_dynamic_link_class); | |
textView = findViewById(R.id.dynamiclinkclass_textview); | |
FirebaseDynamicLinks.getInstance() | |
.getDynamicLink(getIntent()) | |
.addOnSuccessListener(this, new | |
OnSuccessListener<PendingDynamicLinkData>() { | |
@Override | |
public void onSuccess | |
(PendingDynamicLinkData pendingDynamicLinkData) { | |
// Get deep link from result (may be null if no link is found) | |
Uri deepLink = null; | |
if (pendingDynamicLinkData != null) { | |
// 하단의 딥 링크가 링크를 가져온 변수입니다. | |
deepLink = pendingDynamicLinkData.getLink(); | |
getTime(deepLink.toString()); | |
} | |
} | |
}) | |
.addOnFailureListener(this, new OnFailureListener() { | |
@Override | |
public void onFailure(@NonNull Exception e) { | |
} | |
}); | |
} | |
public void createDeepLink() { | |
DynamicLink dynamicLink = FirebaseDynamicLinks.getInstance().createDynamicLink() | |
.setLink(Uri.parse("https://www.kakao.com")) | |
.setDynamicLinkDomain("rlarla245.page.link") | |
// Open links with this app on Android | |
.setAndroidParameters(new DynamicLink.AndroidParameters.Builder("com.kakao.talk").build()) | |
// Open links with com.example.ios on iOS | |
// .setIosParameters(new DynamicLink.IosParameters.Builder("com.example.ios").build()) | |
.buildDynamicLink(); | |
Uri dynamicLinkUri = dynamicLink.getUri(); | |
FirebaseDynamicLinks.getInstance().createDynamicLink() | |
.setAndroidParameters(new DynamicLink.AndroidParameters.Builder("com.kakao.talk").build()) | |
.setLongLink(dynamicLinkUri) | |
.buildShortDynamicLink() | |
.addOnCompleteListener(this, new OnCompleteListener<ShortDynamicLink>() { | |
@Override | |
public void onComplete(@NonNull Task<ShortDynamicLink> task) { | |
if (task.isSuccessful()) { | |
// Short link created | |
Uri shortLink = task.getResult().getShortLink(); | |
System.out.println(shortLink.toString()); | |
// Uri flowchartLink = task.getResult().getPreviewLink(); | |
} else { | |
// Error | |
// ... | |
} | |
} | |
}); | |
} | |
void getTime(String url){ | |
OkHttpClient okHttpClient = new OkHttpClient(); | |
okHttpClient.newCall | |
(new Request.Builder().url(url).build()).enqueue(new Callback() { | |
@Override | |
public void onFailure(Call call, IOException e) { | |
} | |
@Override | |
public void onResponse(Call call, final Response response) throws IOException { | |
new Handler(getMainLooper()).post(new Runnable() { | |
@Override | |
public void run() { | |
try { | |
JSONObject jsonObject | |
= new JSONObject(response.body().string()); | |
textView.setText(jsonObject.getString("time")); | |
} catch (JSONException e) { | |
e.printStackTrace(); | |
} catch (IOException e) { | |
e.printStackTrace(); | |
} catch (NetworkOnMainThreadException e) { | |
finish(); | |
} | |
} | |
}); | |
} | |
}); | |
} | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?xml version="1.0" encoding="utf-8"?> | |
<manifest xmlns:android="http://schemas.android.com/apk/res/android" | |
package=""> | |
<uses-permission android:name="android.permission.INTERNET" /> | |
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> | |
<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/AppTheme"> | |
<activity android:name=".MainActivity"> | |
<intent-filter> | |
<action android:name="android.intent.action.MAIN" /> | |
<category android:name="android.intent.category.LAUNCHER" /> | |
</intent-filter> | |
</activity> | |
<meta-data | |
android:name="com.facebook.sdk.ApplicationId" | |
android:value="@string/facebook_app_id" /> | |
<activity | |
android:name="com.facebook.FacebookActivity" | |
android:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation" | |
android:label="@string/app_name" /> | |
<activity | |
android:name="com.facebook.CustomTabActivity" | |
android:exported="true"> | |
<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/fb_login_protocol_scheme" /> | |
</intent-filter> | |
</activity> | |
<activity | |
android:name=".HomeActivity" | |
android:label="@string/title_activity_home" | |
android:theme="@style/AppTheme" /> | |
<activity android:name=".BoardActivity" /> | |
<activity android:name=".DynamicLinkClass"> | |
<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:host="rlarla245.page.link" android:scheme="https"/> | |
</intent-filter> | |
</activity> | |
</application> | |
</manifest> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment