Skip to content

Instantly share code, notes, and snippets.

@rlarla245
Last active July 25, 2018 12:40
Show Gist options
  • Save rlarla245/d4d4483f776058c755d05c79f81eebbb to your computer and use it in GitHub Desktop.
Save rlarla245/d4d4483f776058c755d05c79f81eebbb to your computer and use it in GitHub Desktop.
Firebase 13 - Receive DynamicLink
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으로 보입니다.
- 이름도 지정합니다.
- 링크 동작 정의에서 해당 앱을 선택합니다.
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();
}
}
});
}
});
}
}
<?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