我想要完成的任务:
到目前为止,我已经能够通过LinkedIn进行身份验证,检索访问令牌,并使用针对LinkedIn的服务来获取用户ID。
流程看起来有点像这样
LISessionManager.getInstance(activity).init(this.activity.get(), permissionScope,
authLinkedInCallback, showDialogIfAppMissing);
返回我的应用程序后,我使用下面的代码捕获Intent数据
LISessionManager.getInstance(activity).onActivityResult(activity, requestCode, resultCode, data);
此部分似乎正常运行,并从 LISessionManager 初始化中的 AuthListener 设置产生 onAuthSuccess 。
发布成功我可以使用提供的 APIHelper 提供的访问令牌来获取用户的基本个人资料
String built = "https://api.linkedin.com/v1/people/~?format=json";
APIHelper.getInstance(activity.get()).getRequest(activity.get(), built, getProfileCallback);
这实际上已成功返回基本用户个人资料信息。
这就是问题所在我只能使用此访问令牌使用 APIHelper 进行调用。当尝试在其他地方使用提供的访问令牌(服务器端,在Postman / Apigee中进行测试)时,它总是返回此响应。
{
"errorCode": 0,
"message": "Unable to verify access token",
"requestId": "M9J2NBQV9J",
"status": 401,
"timestamp": 1430922872474
}
我一直在使用LinkedIn资源调试401问题(https://developer.linkedin.com/docs/oauth2)使用 LISessionManager 。评估当前会话告诉我访问令牌是
检查我的LinkedIn个人资料,它尚未撤消对该应用程序的访问权限,权限范围为 basic_profile,email_address和w_share
我真的很困惑为什么这些生成的accessTokens在LinkedIn SDK之外似乎没有效果,它们在整个服务中无效吗?
任何帮助表示感谢。
答案 0 :(得分:5)
如LinkedIn的Android SDK身份验证文档(https://developer.linkedin.com/docs/android-sdk-auth)中所述,
移动与服务器端访问令牌
请务必注意,通过Mobile SDK获取的访问令牌仅可用于Mobile SDK,并且不能用于进行服务器端REST API调用。
同样,您已经从使用服务器端REST API调用进行身份验证的用户存储的访问令牌将无法与Mobile SDK一起使用。
答案 1 :(得分:3)
虽然LinkedIn声明无法使用Mobile SDK提供的访问令牌进行服务器端API调用,但我只能通过在请求标头中添加x-li-src: msdk
来进行此类调用
答案 2 :(得分:1)
LISessionManager sessionManager = LISessionManager.getInstance(getApplicationContext());
LISession session = sessionManager.getSession();
boolean accessTokenValid = session.isValid();
String respon ="";
if(accessTokenValid) {
String url = "https://api.linkedin.com/v1/people/~?format=json";
//String url = "https://api.linkedin.com/v1/people/~:(id,first-name,last-name,picture-url)";
APIHelper apiHelper = APIHelper.getInstance(getApplicationContext());
apiHelper.getRequest("your activity", url, new ApiListener() {
@Override
public void onApiSuccess(ApiResponse apiResponse) {
respon = apiResponse.toString();
Log.e("Response ", respon);
}
@Override
public void onApiError(LIApiError LIApiError) {
Log.e("error", LIApiError.toString());
}
});
}