Невозможно открыть профиль Linkedin с помощью намерения в Android
Как открыть профиль linkedin с помощью намерения:
Мой код:
context.getPackageManager().getPackageInfo(APP_PACKAGE_NAME, 0);
intent = new Intent(Intent.ACTION_VIEW, Uri.parse("linkedin://profile/" + profileID));
intent.setPackage(APP_PACKAGE_NAME);
// intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent);
Журнал:
12-10 19:18:49.363 936-2104/? I/ActivityManager﹕ START u0 {act=android.intent.action.VIEW dat=linkedin://profile/132778900 pkg=com.linkedin.android cmp=com.linkedin.android/.infra.deeplink.DeepLinkHelperActivity} from pid 8392
12-10 19:18:49.373 1223-1377/? E/﹕ no predefined limited group find for com.linkedin.android, add to foreground group
12-10 19:18:49.463 7964-7964/? I/CrashReporter﹕ Starting activity DeepLinkHelperActivity Intent: Intent { act=android.intent.action.VIEW dat=linkedin://profile/132778900 pkg=com.linkedin.android cmp=com.linkedin.android/.infra.deeplink.DeepLinkHelperActivity }
12-10 19:18:49.493 7964-7964/? E/com.linkedin.android.deeplink.helper.LaunchHelper﹕ urlParams was null, indicating a failure to validate the path in getMap()
12-10 19:18:59.523 7964-7996/? D/LinkedInNetwork﹕ Performing request
12-10 19:19:04.573 1619-1666/? I/XiaomiFirewall﹕ firewall pkgName:com.linkedin.android, result:0
5 ответов
Основываясь на последней документации LinkedIn, вы должны использовать DeepLinkHelper
интегрировать глубокие ссылки с официальным приложением:
// Get a reference to an activity to return the user to
final Activity thisActivity = this;
// A sample member ID value to open
final String targetID = "abcd1234";
DeepLinkHelper deepLinkHelper = DeepLinkHelper.getInstance();
// Open the target LinkedIn member's profile
deepLinkHelper.openOtherProfile(thisActivity, targetID, new DeeplinkListener() {
@Override
public void onDeepLinkSuccess() {
// Successfully sent user to LinkedIn app
}
@Override
public void onDeepLinkError(LiDeepLinkError error) {
// Error sending user to LinkedIn app
}
});
Или предпочитайте следующее, чтобы открыть профиль аутентифицированного пользователя:
// Get a reference to an activity to return the user to
final Activity thisActivity = this;
DeepLinkHelper deepLinkHelper = DeepLinkHelper.getInstance();
// Open the current user's profile
deepLinkHelper.openCurrentProfile(thisActivity, new DeeplinkListener() {
@Override
public void onDeepLinkSuccess() {
// Successfully sent user to LinkedIn app
}
@Override
public void onDeepLinkError(LiDeepLinkError error) {
// Error sending user to LinkedIn app
}
});
В любом случае, если погрузиться в реализациюDeepLinkHelper
вы увидите, что это в конечном итоге построить Intent
это открывает приложение LinkedIn, как это:
private void deepLinkToProfile(@NonNull Activity activity, String memberId, @NonNull AccessToken accessToken) {
Intent i = new Intent("android.intent.action.VIEW");
Uri.Builder uriBuilder = new Uri.Builder();
uriBuilder.scheme("linkedin");
if (CURRENTLY_LOGGED_IN_MEMBER.equals(memberId)) {
uriBuilder.authority(CURRENTLY_LOGGED_IN_MEMBER);
} else {
uriBuilder.authority("profile").appendPath(memberId);
}
uriBuilder.appendQueryParameter("accessToken", accessToken.getValue());
uriBuilder.appendQueryParameter("src", "sdk");
i.setData(uriBuilder.build());
Log.i("Url: ", uriBuilder.build().toString());
activity.startActivityForResult(i, LI_SDK_CROSSLINK_REQUEST_CODE);
}
Как вы можете видеть, помимо прочего, он прикрепляет токен доступа к Uri
в качестве параметра запроса с ключом accessToken
, Другой параметр запроса, который добавляется src
, который (предположительно) просто используется для статистических целей, а не что-то функциональное.
Теперь, если вы посмотрите на эту строку в журнале ошибок:
E/com.linkedin.android.deeplink.helper.LaunchHelper﹕ urlParams was null, indicating a failure to validate the path in getMap()
Замечания:
urlParams был нулевым
Для меня это звучит так, как будто ожидается, что для данных потребуется еще один или несколько параметров запроса. Uri
, Я склонен сказать, что это, скорее всего, относится к (по крайней мере) accessToken
параметр запроса, который отсутствует в вашем собственном фрагменте кода, но является частью потока SDK.
Надеюсь, это толчок в правильном направлении. Возможно, будет проще всего использовать LinkedIn SDK - какой-то конкретной причиной, по которой вы этого не делаете?
public void openLinkedInPage(String linkedId) {
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("linkedin://add/%@" + linkedId));
final PackageManager packageManager = getContext().getPackageManager();
final List<ResolveInfo> list = packageManager.queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY);
if (list.isEmpty()) {
intent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.linkedin.com/profile/view?id=" + linkedId));
}
startActivity(intent);
}
const string PACKAGE = "com.linkedin.android";
Intent intent = new Intent(Intent.ActionView, Uri.Parse("https://www.linkedin.com/in/danielroberts0"));
if(isPackageInstalled(Forms.Context, PACKAGE)) {
intent.SetPackage(PACKAGE);
}
Forms.Context.StartActivity(intent);
Ни одно из решений не дало того, что мне было нужно - открыть страницу профиля пользователя в приложении. по умолчанию или веб-сайт в противном случае.
Uri.parse("linkedin://you"));
final PackageManager packageManager = getContext().getPackageManager();
final List<ResolveInfo> list = packageManager.queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY);
if (list.isEmpty()) {
intent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.linkedin.com/profile/view?id=you"));
}
startActivity(intent);
Попробуйте, он откроет профиль LinkedIn в приложении или откроет в браузере, если приложение LinkedIn не установлено (работает с ноября 2018 года, с последней версией LinkedIn App), не нужно использовать DeepLinkHelper
String profile_url = "https://www.linkedin.com/in/syedfaisal33";
try {
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(profile_url));
intent.setPackage("com.linkedin.android");
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
} catch (Exception e) {
startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(profile_url)));
}
fun getOpenLinkedin(context: Context, url: String) {
val linkedinIntent = Intent(Intent.ACTION_VIEW)
linkedinIntent.setClassName("com.linkedin.android", "com.linkedin.android.profile.ViewProfileActivity")
linkedinIntent.putExtra("memberId", "profile")
linkedinIntent.setPackage("com.linkedin.android")
try {
context.startActivity(linkedinIntent)
} catch (e: ActivityNotFoundException) {
context.startActivity(Intent(Intent.ACTION_VIEW, Uri.parse(url)))
}
}