2015-03-19 6 views
12

Wenn jemand auf einen Link auf einer Webseite des Formulars "com.foo.bar/test" klickt, möchte ich, dass es mein Einheitsspiel öffnet und dass ich die Testdaten bekomme.Wie kann man Nicht-Hauptaktivität verwenden, um benutzerdefinierte URLs im Unity-Spiel zu erfassen?

Ich bin ein erfahrener Programmierer, aber wenn es um Android geht, google ich mich eher herum als wirklich etwas zu verstehen. Bloß das im Sinn. :)

Ich kann auf Links auf Android mit Intent-Filter reagieren. Jedoch haben alle Ressourcen, die ich gefunden habe, angenommen, dass Sie Ihre Hauptaktivität erweitern können, um die neue Absicht zu erfassen. Es ist möglich, das mit Einigkeit zu tun, aber aus verschiedenen Gründen würde ich es lieber nicht tun. Ich habe versucht, eine neue Tätigkeit zu schaffen, um es zu einem Glas zu exportieren, und das Hinzufügen dieser zu meinem Manifest in der Anwendung tag:

<activity android:name="com.foo.ProtocolCatcher" 
      android:label="@string/app_name"> 
    <intent-filter> 
     <action android:name="android.intent.action.MAIN" /> 
     <category android:name="android.intent.category.LAUNCHER" /> 
    </intent-filter> 

    <intent-filter> 
     <data android:scheme="com.foo.bar" /> 
     <action android:name="android.intent.action.VIEW" /> 
     <category android:name="android.intent.category.DEFAULT"/> 
     <category android:name="android.intent.category.BROWSABLE"/> 
    </intent-filter> 
</activity> 

Ein Klick auf einen Link erfolgreich mein Spiel startet, sondern auf einen schwarzen Bildschirm.

bearbeiten: Ich habe auch dieses Format zu keiner Änderung versucht haben:

<activity android:name="com.foo.ProtocolCatcher" 
      android:label="@string/app_name"> 
    <intent-filter> 
    <action android:name="android.intent.action.VIEW" /> 
    <category android:name="android.intent.category.BROWSABLE" /> 
    <category android:name="android.intent.category.DEFAULT" /> 
    <data android:scheme="com.foo.bar" /> 
    </intent-filter> 
</activity> 

Was sind die Zaubersprüche das ganze Spiel Boot zu machen, zusammen mit meiner benutzerdefinierten Aktivität und meine benutzerdefinierte Aktivität lesen lassen die eingehende URL, ohne die Hauptaktivität zu berühren?

+0

werfen Sie einen Blick auf http://oferei.com/2013/06/serverless-instagram-authentication/ – MZaragoza

+0

@tenpn irgendein Fortschritt? Hast du die folgende Lösung ausprobiert? – bonnyz

Antwort

3

Ich nehme an, Sie sind fehlt ein Teil der Boot-Sequenz; die Schritte, die erforderlich sind folgende:

  1. Definieren Sie die ProtocolCatcherActivity mit te richtigen Schema (OK)
  2. Definieren Sie die MainActivty, die Ihr Unity3D Spiel repräsentiert Haupt Activity (OK)
  3. Starten Sie die MainActivity wenn die ProtocolCatcherActivity wird gestartet (fehlt)

Implementieren des dritten Schritts ist super einfach; gerade bearbeiten ProtocolCatcherActivity ‚s onCreate() Methode:

//ProtocolCatcher 
//... 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    //... 

    Intent gameIntent = new Intent(this, MainActivity.class); 
    /* 
     //Pass the extra data to the game if needed 
     Intent sourceIntent = getIntent(); 
     Uri data = sourceIntent.getData(); 
     gameIntent.putExtra("uriData", data != null ? data.toString(): null); 
    */ 
    startActivity(gameIntent); //start the real game 
    finish(); //close the ProtocolCatcher activity 

} 

In Anbetracht der Tatsache, dass Sie "Injektion" die ProtocolCatcherActivity manuell, wenn Sie Problem MainActivity vom ProtocolCatcheronCreate() herzutragen Sie können lookup the relative Class using reflection.

+0

Eigentlich denke ich, dass es "UnityActivity" ist, das Unity-Spiel repräsentiert, nicht "MainActivity". –

+0

Ja, ich habe 'com.unity3d.player.UnityPlayerProxyActivity' als MainActivity verwendet. Es funktionierte. Das einzige Problem ist, dass das Spiel neu gestartet wird, wenn es bereits geöffnet ist und Sie einem Link folgen. – tenpn

+0

... Ich habe das Problem mit dem Neustart behoben, indem ich startActivity() in 'if (com.unity3d.player.UnityPlayer.currentActivity == null) ' – tenpn

Verwandte Themen