2014-09-04 4 views
0

Я работаю над игрой, которая использует Vuforia SDK, и я хочу, чтобы интегрировать Push-уведомления предпочтительно с использованием UrbanAirship (это то, что просил мой клиент)Unity3D Push-уведомления IOS и Android Vuforia & UrbanAirship

Я пытался чтобы получать Push Notifications для работы как с iOS, так и с Android, но не повезло, а не с UrbanAirship, а не каким-либо другим способом, я также попробовал плагины Pushwoosh Unity.

Задача 1: Возможно ли интегрировать UrbanAirship с Unity3d? Любые ссылки/предложения/образцы были бы замечательными, я искал, но не смог найти что-либо релевантное.

Проблема 2: (если я правильно понимаю) заключается в том, что Vurforia SDK требует MAIN-активности в файле манифеста Android, поэтому это мешает мне реализовать плагины, такие как Pushwoosh или другие подобные плагины, чтобы использовать GCM (Google Cloud Сообщения), они также должны выполнять MAIN.

Проблема 3: Опять же, если я правильно понял все сайты/форумы/сообщения, которые я прочитал, GCM - это способ сделать push-уведомления для Android. Немного о GCM это общий двух API сообщений, может ли он использоваться для push-уведомлений, когда приложение не работает? или я полностью ошибаюсь?

Я знаю и извиняюсь за длинный вопрос, но это первый случай решения Push Notifications, не говоря уже о том, что будет работать как на iOS, так и на Android. Я бы очень признателен за любые предложения о том, как это сделать. ТИА!

+0

wrt 1: мы также используем urbanairship, и да, его можно использовать рядом с другим плагином, трюк заключается в том, чтобы прикрепить к уровню приложения, а не к основной деятельности. – Rudolfwm

+0

@ Rudolfwm спасибо, это приятно знать. Есть ли вероятность, что вы можете опубликовать пример того, как прикрепить его к уровню приложения, как вы предложили? ТИА! –

ответ

0

Это код от андроида плагина, который я построил для городского дирижабля

Пожалуйста, обратите внимание, что я расширил применение. Вам также нужен целевой класс приемника.

package com.yourapp.urbanairship; 

import android.app.Application; 
import android.util.Log; 

import com.urbanairship.AirshipConfigOptions; 
import com.urbanairship.Logger; 
import com.urbanairship.UAirship; 
import com.urbanairship.push.CustomPushNotificationBuilder; 
import com.urbanairship.push.PushManager; 

public class UrbanAirShipPlugin extends Application { 


    @Override 
    public void onCreate() { 

     super.onCreate(); 

     AirshipConfigOptions options = AirshipConfigOptions.loadDefaultOptions(this); 

    options.productionAppKey ="XXXXXXXXXXXXXXXXXXXXXXXXXX"; // from urban airship 
    options.productionAppSecret = "XXXXXXXXXXXXXXXXXXXXXXXXXX"; // from urban airship 
    options.developmentAppKey ="XXXXXXXXXXXXXXXXXXXXXXXXXX"; // from urban airship 
    options.developmentAppSecret = "XXXXXXXXXXXXXXXXXXXXXXXXXX";// from urban airship 
    options.gcmSender = "XXXXXXXXXXXXXX"; // from GOOGLE -> basically your project id 

    options.inProduction = true; 
    options.analyticsEnabled =false; 
    options.minSdkVersion=18; 

    //determines which app key to use 
    // Take off initializes the services 
    UAirship.takeOff(this, options); 
    PushManager.shared().setIntentReceiver(IntentReceiver.class); 

    } 
} 

Вот Намерение класс приемника:

package your.package.name; 

import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.util.Log; 

import com.urbanairship.UAirship; 
import com.urbanairship.push.GCMMessageHandler; 
import com.urbanairship.push.PushManager; 

import java.util.Arrays; 
import java.util.List; 
import java.util.Set; 

public class IntentReceiver extends BroadcastReceiver { 

    private static final String logTag = "PushSample"; 

    public static String APID_UPDATED_ACTION_SUFFIX = ".apid.updated"; 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     Log.i(logTag, "Received intent: " + intent.toString()); 
     String action = intent.getAction(); 

     if (action.equals(PushManager.ACTION_PUSH_RECEIVED)) { 

      int id = intent.getIntExtra(PushManager.EXTRA_NOTIFICATION_ID, 0); 

      Log.i(logTag, "Received push notification. Alert: " 
       + intent.getStringExtra(PushManager.EXTRA_ALERT) 
       + " [NotificationID="+id+"]"); 

      logPushExtras(intent); 

     } else 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.setClassName(UAirship.shared().getApplicationContext(), "your.main.activity"); 
      launch.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 

      UAirship.shared().getApplicationContext().startActivity(launch); 

     } else if (action.equals(PushManager.ACTION_REGISTRATION_FINISHED)) { 
      Log.i(logTag, "Registration complete. APID:" + intent.getStringExtra(PushManager.EXTRA_APID) 
       + ". Valid: " +  intent.getBooleanExtra(PushManager.EXTRA_REGISTRATION_VALID, false)); 

      // Notify any app-specific listeners 
      Intent launch = new Intent(UAirship.getPackageName() + APID_UPDATED_ACTION_SUFFIX); 
      UAirship.shared().getApplicationContext().sendBroadcast(launch); 

     } else if (action.equals(GCMMessageHandler.ACTION_GCM_DELETED_MESSAGES)) { 
      Log.i(logTag, "The GCM service deleted "+intent.getStringExtra(GCMMessageHandler.EXTRA_GCM_TOTAL_DELETED)+" messages."); 
    } 

} 

/** 
* Log the values sent in the payload's "extra" dictionary. 
* 
* @param intent A PushManager.ACTION_NOTIFICATION_OPENED or ACTION_PUSH_RECEIVED intent. 
*/ 
    private void logPushExtras(Intent intent) { 
     Set<String> keys = intent.getExtras().keySet(); 
     for (String key : keys) { 

      //ignore standard C2DM extra keys 
      List<String> ignoredKeys = (List<String>)Arrays.asList(
       "collapse_key",//c2dm collapse key 
       "from",//c2dm sender 
       PushManager.EXTRA_NOTIFICATION_ID,//int id of generated notification (ACTION_PUSH_RECEIVED only) 
       PushManager.EXTRA_PUSH_ID,//internal UA push id 
       PushManager.EXTRA_ALERT);//ignore alert 
      if (ignoredKeys.contains(key)) { 
       continue; 
      } 
      Log.i(logTag, "Push Notification Extra: ["+key+" : " + intent.getStringExtra(key) + "]"); 
     } 
    } 
} 

Пожалуйста, обратите внимание, что вам нужно, чтобы добавить плагин com.yourapp.urbanairship имя для расширения приложения к манифесту (рядом со всем другие вещи, вам нужно есть):

<application android:allowClearUserData="true" android:icon="@drawable/app_icon" android:label="@string/app_name" android:name="com.yourapp.urbanairship" android:debuggable="true"> 

И не забывайте, что еще urbanairship нуждается в манифесте (также см here)

+0

спасибо за ответ, я попробую реализовать его при отправке назад, когда я закончил. Еще раз спасибо! –

Смежные вопросы