Branch.io:当您点击 link 时,深入 link 进入特定的 activity
Branch.io: deeplinking into a specific activity when you click on a link
我成功创建了一个深度link并将其发布到 facebook 并附上所有相关元数据:
TextView.OnClickListener inviteClickListener = new View.OnClickListener() {
@Override
public void onClick(View v) {
BranchUniversalObject branchUniversalObject = new BranchUniversalObject()
// The identifier is what Branch will use to de-dupe the content across many different Universal Objects
.setCanonicalIdentifier("item/12345")
// This is where you define the open graph structure and how the object will appear on Facebook or in a deepview
.setTitle("Suits")
.setContentDescription("Great suits here")
.setContentImageUrl("http://steezo.com/wp-content/uploads/2012/12/man-in-suit.jpg")
// You use this to specify whether this content can be discovered publicly - default is public
.setContentIndexingMode(BranchUniversalObject.CONTENT_INDEX_MODE.PUBLIC)
// Here is where you can add custom keys/values to the deep link data
.addContentMetadata("picurl", "http://steezo.com/wp-content/uploads/2012/12/man-in-suit.jpg");
LinkProperties linkProperties = new LinkProperties()
.setChannel("facebook")
.setFeature("sharing")
.addControlParameter("$desktop_url", "http://www.yahoo.com")
.addControlParameter("$ios_url", "http://www.microsoft.com");
ShareSheetStyle shareSheetStyle = new ShareSheetStyle(PlaceDetailsActivity.this, "Check this out!", "This stuff is awesome: ")
.setMoreOptionStyle(getResources().getDrawable(android.R.drawable.ic_menu_search), "Show more")
.addPreferredSharingOption(SharingHelper.SHARE_WITH.FACEBOOK)
.addPreferredSharingOption(SharingHelper.SHARE_WITH.EMAIL);
branchUniversalObject.showShareSheet(PlaceDetailsActivity.this,
linkProperties,
shareSheetStyle,
new Branch.BranchLinkShareListener() {
@Override
public void onShareLinkDialogLaunched() {
}
@Override
public void onShareLinkDialogDismissed() {
}
@Override
public void onLinkShareResponse(String sharedLink, String sharedChannel, BranchError error) {
Log.e("LinkShared", "success");
}
@Override
public void onChannelSelected(String channelName) {
}
});
branchUniversalObject.generateShortUrl(PlaceDetailsActivity.this, linkProperties, new Branch.BranchLinkCreateListener() {
@Override
public void onLinkCreate(String url, BranchError error) {
if (error == null) {
Log.i("MyApp", "got my Branch link to share: " + url);
}
}
});
}
};
我没有成功做到的是确保单击 link 时,它会在我的应用程序中转到正确的 activity。我密切关注指南,但有时我发现指南有点含糊 - https://dev.branch.io/references/android_sdk/#branch-universal-object-for-deep-links-content-analytics-and-indexing.
在我要调用的activity中,我把这个放在清单中:
<activity
android:name=".SuitActivity"
android:label=""
android:windowSoftInputMode="adjustResize">
<meta-data android:name="io.branch.sdk.auto_link_keys_6" android:value="picurl" />
</activity>
在 SuitActivity class 中,我输入了以下内容:
@Override
protected void onResume() {
super.onResume();
if (Branch.isAutoDeepLinkLaunch(this)) {
try {
action.setPicurl(Branch.getInstance().getLatestReferringParams().getString("picurl"));
} catch (JSONException e) {
e.printStackTrace();
}
} else {
Log.e("nondeeplink","Launched by normal application flow");
}
}
这似乎是点击 Facebook 中的 link 并打开我的 SuitActivity 而不是 MainActivity 所需要做的全部,但它似乎不起作用。当我单击分支 link 时,它会打开 MainActivity。
当我在 Branch 上创建 link 时,这是日志中返回的内容:
2-16 19:44:38.019 24086-24086/com.example I/MyApp: got my Branch link to share: https://bnc.lt/cByh/7d3u8enomp
12-16 19:44:38.021 24086-24129/com.example I/BranchSDK: posting to https://api.branch.io/v1/url
12-16 19:44:38.021 24086-24129/com.example I/BranchSDK: Post value = {
"identity_id": "20569XXX",
"device_fingerprint_id": "20519XXX",
"session_id": "2057XXX",
"tags": [],
"alias": "",
"channel": "Add to Facebook",
"feature": "sharing",
"stage": "",
"data": "{\"$og_title\":\"Suits\",\"$canonical_identifier\":\"item\\/12345\",\"$keywords\":[],\"$og_description\":\"Great suits here\",\"$og_image_url\":\"http:\\/\\/steezo.com\\/wp-content\\/uploads\\/2012\\/12\\/man-in-suit.jpg\",\"$content_type\":\"\",\"$exp_date\":\"0\",\"picurl\":\"http:\\/\\/steezo.com\\/wp-content\\/uploads\\/2012\\/12\\/man-in-suit.jpg\",\"$desktop_url\":\"http:\\/\\/www.yahoo.com\",\"$ios_url\":\"http:\\/\\/www.microsoft.com\",\"source\":\"android\"}",
"sdk": "android1.10.1",
"retryNumber": 0,
"branch_key": "key_test_XXX"
}
编辑:
我现在甚至添加了一个 GitHub 示例供您测试:https://github.com/Winghin2517/BranchIOTestDeepLink
它包括两个活动:
带有 FAB 的 MainActivity - 它是通过 Android Studios 创建的新应用程序的标准模板。如果您点击 FAB,Branch.io 将启动并要求您添加到 facebook,复制 link 等
SecondActivity - 在 facebook 上分享它并在 link 上单击 facebook 后,SecondActivity 应该启动。目前,当您在 Facebook 或您分享它的任何地方单击 link 时,link 仍会打开 MainActivity。
要使此示例正常工作,还请将您的 branch.IO 密钥替换为清单中个人资料中的当前密钥,它们只是 XXX 的:
<meta-data android:name="io.branch.sdk.BranchKey" android:value="key_live_XXX" />
<meta-data android:name="io.branch.sdk.BranchKey.test" android:value="key_test_XXX" />
谢谢!
Github repo 现在是 android 和 Branch.io 的一个工作示例,经过几天与 branch.io 的来回联络,我终于让它工作了:
https://github.com/Winghin2517/BranchIOTestDeepLink
如果您在 Facebook 或您决定将 link 发送到的任何地方单击 link,该应用程序将打开 'SecondActivity',而不是 'MainActivity' .如果您从 'SecondActivity' 单击返回,它将关闭应用程序,因为 onActivityResult
方法将在 'MainActivity' 中使用正确的 activity 代码和 finish()
方法在 'MainActivity' 中调用以关闭应用程序。
我成功创建了一个深度link并将其发布到 facebook 并附上所有相关元数据:
TextView.OnClickListener inviteClickListener = new View.OnClickListener() {
@Override
public void onClick(View v) {
BranchUniversalObject branchUniversalObject = new BranchUniversalObject()
// The identifier is what Branch will use to de-dupe the content across many different Universal Objects
.setCanonicalIdentifier("item/12345")
// This is where you define the open graph structure and how the object will appear on Facebook or in a deepview
.setTitle("Suits")
.setContentDescription("Great suits here")
.setContentImageUrl("http://steezo.com/wp-content/uploads/2012/12/man-in-suit.jpg")
// You use this to specify whether this content can be discovered publicly - default is public
.setContentIndexingMode(BranchUniversalObject.CONTENT_INDEX_MODE.PUBLIC)
// Here is where you can add custom keys/values to the deep link data
.addContentMetadata("picurl", "http://steezo.com/wp-content/uploads/2012/12/man-in-suit.jpg");
LinkProperties linkProperties = new LinkProperties()
.setChannel("facebook")
.setFeature("sharing")
.addControlParameter("$desktop_url", "http://www.yahoo.com")
.addControlParameter("$ios_url", "http://www.microsoft.com");
ShareSheetStyle shareSheetStyle = new ShareSheetStyle(PlaceDetailsActivity.this, "Check this out!", "This stuff is awesome: ")
.setMoreOptionStyle(getResources().getDrawable(android.R.drawable.ic_menu_search), "Show more")
.addPreferredSharingOption(SharingHelper.SHARE_WITH.FACEBOOK)
.addPreferredSharingOption(SharingHelper.SHARE_WITH.EMAIL);
branchUniversalObject.showShareSheet(PlaceDetailsActivity.this,
linkProperties,
shareSheetStyle,
new Branch.BranchLinkShareListener() {
@Override
public void onShareLinkDialogLaunched() {
}
@Override
public void onShareLinkDialogDismissed() {
}
@Override
public void onLinkShareResponse(String sharedLink, String sharedChannel, BranchError error) {
Log.e("LinkShared", "success");
}
@Override
public void onChannelSelected(String channelName) {
}
});
branchUniversalObject.generateShortUrl(PlaceDetailsActivity.this, linkProperties, new Branch.BranchLinkCreateListener() {
@Override
public void onLinkCreate(String url, BranchError error) {
if (error == null) {
Log.i("MyApp", "got my Branch link to share: " + url);
}
}
});
}
};
我没有成功做到的是确保单击 link 时,它会在我的应用程序中转到正确的 activity。我密切关注指南,但有时我发现指南有点含糊 - https://dev.branch.io/references/android_sdk/#branch-universal-object-for-deep-links-content-analytics-and-indexing.
在我要调用的activity中,我把这个放在清单中:
<activity
android:name=".SuitActivity"
android:label=""
android:windowSoftInputMode="adjustResize">
<meta-data android:name="io.branch.sdk.auto_link_keys_6" android:value="picurl" />
</activity>
在 SuitActivity class 中,我输入了以下内容:
@Override
protected void onResume() {
super.onResume();
if (Branch.isAutoDeepLinkLaunch(this)) {
try {
action.setPicurl(Branch.getInstance().getLatestReferringParams().getString("picurl"));
} catch (JSONException e) {
e.printStackTrace();
}
} else {
Log.e("nondeeplink","Launched by normal application flow");
}
}
这似乎是点击 Facebook 中的 link 并打开我的 SuitActivity 而不是 MainActivity 所需要做的全部,但它似乎不起作用。当我单击分支 link 时,它会打开 MainActivity。
当我在 Branch 上创建 link 时,这是日志中返回的内容:
2-16 19:44:38.019 24086-24086/com.example I/MyApp: got my Branch link to share: https://bnc.lt/cByh/7d3u8enomp
12-16 19:44:38.021 24086-24129/com.example I/BranchSDK: posting to https://api.branch.io/v1/url
12-16 19:44:38.021 24086-24129/com.example I/BranchSDK: Post value = {
"identity_id": "20569XXX",
"device_fingerprint_id": "20519XXX",
"session_id": "2057XXX",
"tags": [],
"alias": "",
"channel": "Add to Facebook",
"feature": "sharing",
"stage": "",
"data": "{\"$og_title\":\"Suits\",\"$canonical_identifier\":\"item\\/12345\",\"$keywords\":[],\"$og_description\":\"Great suits here\",\"$og_image_url\":\"http:\\/\\/steezo.com\\/wp-content\\/uploads\\/2012\\/12\\/man-in-suit.jpg\",\"$content_type\":\"\",\"$exp_date\":\"0\",\"picurl\":\"http:\\/\\/steezo.com\\/wp-content\\/uploads\\/2012\\/12\\/man-in-suit.jpg\",\"$desktop_url\":\"http:\\/\\/www.yahoo.com\",\"$ios_url\":\"http:\\/\\/www.microsoft.com\",\"source\":\"android\"}",
"sdk": "android1.10.1",
"retryNumber": 0,
"branch_key": "key_test_XXX"
}
编辑:
我现在甚至添加了一个 GitHub 示例供您测试:https://github.com/Winghin2517/BranchIOTestDeepLink
它包括两个活动:
带有 FAB 的 MainActivity - 它是通过 Android Studios 创建的新应用程序的标准模板。如果您点击 FAB,Branch.io 将启动并要求您添加到 facebook,复制 link 等
SecondActivity - 在 facebook 上分享它并在 link 上单击 facebook 后,SecondActivity 应该启动。目前,当您在 Facebook 或您分享它的任何地方单击 link 时,link 仍会打开 MainActivity。
要使此示例正常工作,还请将您的 branch.IO 密钥替换为清单中个人资料中的当前密钥,它们只是 XXX 的:
<meta-data android:name="io.branch.sdk.BranchKey" android:value="key_live_XXX" />
<meta-data android:name="io.branch.sdk.BranchKey.test" android:value="key_test_XXX" />
谢谢!
Github repo 现在是 android 和 Branch.io 的一个工作示例,经过几天与 branch.io 的来回联络,我终于让它工作了:
https://github.com/Winghin2517/BranchIOTestDeepLink
如果您在 Facebook 或您决定将 link 发送到的任何地方单击 link,该应用程序将打开 'SecondActivity',而不是 'MainActivity' .如果您从 'SecondActivity' 单击返回,它将关闭应用程序,因为 onActivityResult
方法将在 'MainActivity' 中使用正确的 activity 代码和 finish()
方法在 'MainActivity' 中调用以关闭应用程序。