无法从浏览器返回应用程序

时间:2016-03-29 08:06:53

标签: android api github authorization

我正在尝试授权我的GitHub应用并转回我的应用。我用Intent打开授权页面,但无法从浏览器返回我的应用程序。你能看一下我的代码并告诉我哪里弄错了吗?

LoginActivity.java

private final String clientId="myclientid";
private final String clientSecret="myclientsecret";
private final String redirectUri="http://localhost";
private final String state="randomshit";

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_login);

    Button loginButton = (Button) findViewById(R.id.loginbutton);
    loginButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent intent = new Intent(Intent.ACTION_VIEW,
                    Uri.parse("https://github.com/login/oauth/authorize?" +
                            "&client_id="+clientId+
                           "&redirect_uri="+redirectUri+
                            "&state="+state)
                    );
            startActivity(intent);
        }
    });
}


@Override
protected void onResume() {
    super.onResume();

    // the intent filter defined in AndroidManifest will handle the return from ACTION_VIEW intent
    Uri uri = getIntent().getData();

    if (uri != null && uri.toString().startsWith(redirectUri)) {
        String code = uri.getQueryParameter("code");

        if (code != null) {
            Log.d("code",code);
        }
    }

}

的AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.figengungor.retrogithub">

    <uses-permission android:name="android.permission.INTERNET" />

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        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>

        <activity android:name=".LoginActivity">
            <intent-filter>
                <action android:name="android.intent.action.VIEW"></action>
                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="android.intent.category.BROWSABLE" />
                <data
                    android:host="localhost"
                    android:scheme="http" />
            </intent-filter>
        </activity>
    </application>

</manifest>

我的GitHub应用并重定向uri:

enter image description here

3 个答案:

答案 0 :(得分:1)

你有没有理由使用&#34; http&#34;和#34; localhost&#34;对于意图过滤器? 我认为您的问题是浏览器将始终处理重定向,因为它了解协议(http)。 我会使用不同的协议和主机名。例如:

mySlice := make([]*UselessStruct, 0, 5)
for i := range mySlice {
    mySlice[i] = &UselessStruct{}
}

确保将授权回调网址更新为&#34; oauth:// consumecode&#34;在GitHub。

答案 1 :(得分:0)

只需使用您自己的浏览器即可完成。 意味着使用 webview 在您的应用中轻松登录,我认为它可以解决您的问题。

答案 2 :(得分:0)

尝试在loginButton onClick中使用startActivityForResult(intent)代替startActivity(intent)