我的问题是我需要从我的网站获取cookie。为了解决这个问题,我有一个像http://example.com/cookie
这样的API端点,可以使用应用模式myapp://cookie=some_cookie
重定向
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (goToBrowser) { // Going to url which redirects back to this activity
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
startActivityForResult(intent, RESULT_OK);
} else { // Parcing incoming url
setResult(RESULT_OK);
finish();
}
}
我有Activity
处理应用程序架构。如果我无法更改some_cookie
课程,我怎样才能获得appActivity
更新:
我设法使用答案获取cookie,但是当我调用finish()
时,它会返回浏览器,而不是活动,它会调用浏览器
更新2 : 我更新了代码,添加了标志,但行为相同
答案 0 :(得分:2)
您可以使用嗅探器活动:
1:从AndroidManifest.xml中取消注册现有活动的intent过滤器(删除intent-filter data / scheme / host / path)
2:您可以创建一个新的CookieSnifferActivity并将其注册到AndroidManifest.xml中,使用完全相同的外部意图过滤器(您从现有活动中删除的数据),例如:
@IBAction func logout(sender: AnyObject) {
performSegueWithIdentifier("MainToLoginSegue", sender: nil)
}
3:在新的CookieSnifferActivity的onCreate中,您现在应该能够读取cookie数据了:
<activity android:name=".my.package.CookieSnifferActivity">
<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="http" />
<data android:host="example.com" />
<data android:pathPrefix="cookie"/>
</intent-filter>
</activity>
4:在CookieSnifferActivity的onActivityResult()中,转发输出结果:
getIntent().getData().getPath()
5:最后你只想将嗅觉意图转发给之前的处理活动:
protected void onActivityResult (int requestCode, int resultCode, Intent data){
setResult(resultCode)
finish();
//...
}
答案 1 :(得分:0)
据我所知,每当你致电Time
时。它将重定向到http://example.com/cookie
并且您需要来自重定向网址的cookie。如果我在假设情景时出错,请告诉我。这是可能的解决方案。
myapp://cookie=some_cookie
答案 2 :(得分:0)
我不确定我是否正确理解了你的问题。但如果myapp://cookie=some_cookie
是您应用的深层链接,那么您可以通过以下方法获取cookie
param的值
//onCreate function of activity which processes app schema
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (getIntent() != null && getIntent().getData() != null) {
Uri data = getIntent().getData();
//your cookie
String cookie = data.getQueryParameter("cookie");
}
}
答案 3 :(得分:0)
尝试使用类似于Markus&#39;回答,但有一个不同的旗帜。使用代理活动来捕获应用程序架构意图并在那里提取cookie。然后启动启动浏览器的原始活动,将cookie作为Intent中的数据传递,并在Intent中设置FLAG_ACTIVITY_CLEAR_TOP标志。
此标志应清除在原始活动之后启动的所有活动,并且您的活动堆栈应在启动浏览器之前返回,并将cookie作为数据传递给原始活动。