2016-03-29 13 views
0

Ich versuche, meine GitHub-App zu autorisieren und zu meiner App zurückzukehren. Ich öffne die Autorisierungsseite mit Intent, kann aber nicht vom Browser zu meiner App zurückkehren. Könnten Sie sich bitte meinen Code ansehen und mir sagen, wo ich falsch lag?Ich kann nicht vom Browser zur App zurückkehren

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> 

Meine GitHub App und umleiten uri:

enter image description here

+0

Was meinen Sie mit 'kann nicht zurück zu meiner App von Browser gehen'? Was ist die Antwort, die Sie bekommen? – Jas

+0

Was passiert, wenn Sie im Telefon auf die Zurück-Taste drücken? –

+0

Nach der Autorisierung wird es zu meinem redirectUri weitergeleitet, und der Code-Parameter wird an mein redirectUri angehängt, was bedeutet, dass die Autorisierung erfolgreich ist. Es wird gesagt, dass, wenn redirectUri mit meiner Weiterleitung in dem Intent-Filter übereinstimmt, den ich hinzugefügt habe, es zurück zur App gehen soll und dann mein onResume-Teil den Code-Parameter extrahiert. Soll das nicht so funktionieren? –

Antwort

0

Es ist einfach mit dem eigenen Browser verwenden getan. Bedeutet webview für den Login in Ihrer app.its einfach und ich denke, es wird Ihr Problem lösen.

+0

Ich kenne diese Alternative, aber ich wollte lernen, warum es mit diesem Ansatz nicht funktioniert. –

0

Versuchen Sie startActivityForResult(intent) anstelle von startActivity(intent) in Ihrem loginButton onClick.

1

Gibt es einen Grund, warum Sie "http" und "localhost" für den Intent-Filter verwenden? Ich denke, dein Problem ist, dass der Browser immer die Weiterleitung behandelt, da er das Protokoll (http) versteht. Ich würde ein anderes Protokoll und einen anderen Hostnamen verwenden. Zum Beispiel:

<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="consumecode" 
       android:scheme="oauth" /> 
     </intent-filter> 
    </activity> 

Achten Sie darauf, die Autorisierungs-Rückruf-URL zu aktualisieren, um "oauth: // consumecode" auf GitHub.

Verwandte Themen