【问题标题】:Appcelerator UrbanAirship and android (launch app)Appcelerator UrbanAirship 和 android(启动应用程序)
【发布时间】:2012-09-25 12:45:28
【问题描述】:

我在我的 Appcelerator 项目中使用 UrbanAirship 模块来接收推送通知。我正在接收推送通知,但是当用户在其 Android 设备上单击通知中心的通知时,应用程序不会启动。虽然它在 iPhone 上。任何想法如何解决这个问题?

谢谢。

更新

以下是用于在android上订阅推送通知的代码

UrbanAirship = require("ti.urbanairship")

Ti.API.log "UrbanAirship.pushEnabled " + UrbanAirship.pushEnabled
Ti.API.log "UrbanAirship.pushId " + UrbanAirship.pushId

UrbanAirship.options =
  PRODUCTION_APP_KEY: "XXXX"
  PRODUCTION_APP_SECRET: "XXXX"
  DEVELOPMENT_APP_KEY: "XXXX"
  DEVELOPMENT_APP_SECRET: "XXXX"
  LOGGING_ENABLED: true

UrbanAirship.addEventListener UrbanAirship.EVENT_URBAN_AIRSHIP_CALLBACK, (e) ->
  Ti.API.info "UrbanAirship: Received message " + e.message
  alert e.message

UrbanAirship.addEventListener UrbanAirship.EVENT_URBAN_AIRSHIP_SUCCESS, (e) ->
  token = e.deviceToken
  Ti.App.Properties.setString "device_token", token
  Ti.API.info "UrbanAirship: Received device token " + token

UrbanAirship.addEventListener UrbanAirship.EVENT_URBAN_AIRSHIP_ERROR, (e) ->
  Ti.API.info "UrbanAirship: Error " + e.error

UrbanAirship.pushEnabled = true

在服务器端:

notification = {"android" => {"alert" => message}, "apids" => android_device_tokens}
Urbanairship.push(notification)

这里是tiapp.xml中的android相关代码

<property name="ti.android.debug" type="bool">true</property>
<android xmlns:android="http://schemas.android.com/apk/res/android">
    <manifest android:installLocation="preferExternal"
        android:versionCode="10" android:versionName="1.0.6"/>
    <manifest>
        <supports-screens android:anyDensity="false"/>
        <application>
            <activity
                android:configChanges="keyboardHidden|orientation"
                android:name="org.appcelerator.titanium.TiActivity" android:screenOrientation="portrait"/>
        </application>
    </manifest>
</android>

下面是airshipconfig.properties

developmentAppKey = xxx
developmentAppSecret = xxx
productionAppKey = xxx
productionAppSecret = xxx

transport = c2dm

c2dmSender = xxxx@gmail.com
inProduction = true

iapEnabled = false

这里是自动生成的 AndroidManifest.xml

<?xml version="1.0" ?>
<manifest android:installLocation="preferExternal" android:versionCode="10" android:versionName="1.0.6" package="com.batmanadventure" xmlns:android="http://schemas.android.com/apk/res/android">
  <supports-screens android:anyDensity="false"/>
  <uses-sdk android:minSdkVersion="8"/>
  <permission android:name="com.batmanadventure.permission.C2D_MESSAGE" android:protectionLevel="signature"/>
  <application android:debuggable="false" android:icon="@drawable/appicon" android:label="BatmanAdventure" android:name="BatmanadventureApplication">
    <activity android:configChanges="keyboardHidden|orientation" android:name="org.appcelerator.titanium.TiActivity" android:screenOrientation="portrait"/>
    <receiver android:name="com.urbanairship.CoreReceiver">
      <!-- REQUIRED IntentFilter - For Helium and Hybrid -->
      <intent-filter>
        <action android:name="android.intent.action.BOOT_COMPLETED"/>
        <action android:name="android.intent.action.ACTION_SHUTDOWN"/>
      </intent-filter>
    </receiver>
    <receiver android:name="com.urbanairship.push.c2dm.C2DMPushReceiver" android:permission="com.google.android.c2dm.permission.SEND">
      <!-- Receive the actuggal message -->
      <intent-filter>
        <action android:name="com.google.android.c2dm.intent.RECEIVE"/>
        <category android:name="com.batmanadventure"/>
      </intent-filter>
      <!-- Receive the registration id -->
      <intent-filter>
        <action android:name="com.google.android.c2dm.intent.REGISTRATION"/>
        <category android:name="com.batmanadventure"/>
      </intent-filter>
    </receiver>
    <service android:name="com.urbanairship.push.PushService"/>
    <receiver android:name="ti.modules.titanium.urbanairship.IntentReceiver"/>
    <activity android:configChanges="keyboardHidden|orientation" android:label="BatmanAdventure" android:name=".BatmanadventureActivity" android:theme="@style/Theme.Titanium">
      <intent-filter>
        <action android:name="android.intent.action.MAIN"/>
        <category android:name="android.intent.category.LAUNCHER"/>
      </intent-filter>
    </activity>
    <activity android:configChanges="keyboardHidden|orientation" android:name="org.appcelerator.titanium.TiTranslucentActivity" android:theme="@android:style/Theme.Translucent"/>
    <activity android:configChanges="keyboardHidden|orientation" android:name="org.appcelerator.titanium.TiModalActivity" android:theme="@android:style/Theme.Translucent"/>
    <activity android:configChanges="keyboardHidden|orientation" android:name="ti.modules.titanium.ui.TiTabActivity"/>
    <activity android:name="ti.modules.titanium.ui.android.TiPreferencesActivity"/>
    <service android:exported="false" android:name="org.appcelerator.titanium.analytics.TiAnalyticsService"/>
  </application>
  <uses-permission android:name="android.permission.VIBRATE"/>
  <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
  <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
  <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE"/>
  <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
  <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
  <uses-permission android:name="android.permission.READ_PHONE_STATE"/>
  <uses-permission android:name="android.permission.INTERNET"/>
  <uses-permission android:name="com.batmanadventure.permission.C2D_MESSAGE"/>
</manifest>

【问题讨论】:

  • 你应该发布你的通知代码
  • 您是否按照“启用推送通知”here 下的说明进行操作?

标签: android coffeescript push-notification appcelerator urbanairship.com


【解决方案1】:

首先,urbanairship 库肯定不是问题。因为 urbanairship 不会错过这种基本的东西。 检查Custom Handling of Push Events

在这里,通过检查 PushManager.ACTION_NOTIFICATION_OPENED 然后调用 UAirship.shared().getApplicationContext().startActivity(launch); 来处理活动的启动略有不同

在您的ti.modules.titanium.urbanairship.IntentReceiver

public class IntentReceiver extends BroadcastReceiver {
    private static final String logTag = "PushSample";

    @Override
    public void onReceive(Context context, Intent intent) {
      String action = intent.getAction();
      if (action.equals(PushManager.ACTION_NOTIFICATION_OPENED)) {
          Log.i(logTag, "User clicked notification. Message: " + intent.getStringExtra(PushManager.EXTRA_ALERT));

          logPushExtras(intent);

          Intent launch = new Intent(Intent.ACTION_MAIN);
          launch.setClass(UAirship.shared().getApplicationContext(), MainActivity.class);
          launch.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
          UAirship.shared().getApplicationContext().startActivity(launch);
    }
}

您可以在launch.setClass(UAirship.shared().getApplicationContext(),MainActivity.class);中设置要启动的活动

【讨论】:

    【解决方案2】:

    可能是urbanairship 库的问题。如果他们没有在通知中添加 PendingIntent,它将不会打开您的应用。

    我刚刚查看了 urbanairship.com,但他们似乎没有提供 Android 的源代码,只有 jar。

    【讨论】:

    • 谢谢。可能就是这样。我在 Android 相关论坛中看到过 PendingIntent 提及。有没有办法我自己可以做到这一点。或者这是我可以在 AndroidManfiest 文件中添加的内容。再次感谢您的帮助。
    • 我不认为这是没有urbanairship源代码可以解决的问题。您可以尝试向他们发送一封电子邮件并解释您的应用中发生了什么,或者明确询问他们是否确实在通知中附加了 PendingIntent。
    猜你喜欢
    • 1970-01-01
    • 2015-09-24
    • 1970-01-01
    • 1970-01-01
    • 2011-10-10
    • 1970-01-01
    • 2012-06-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多